2021-07-15

周四,对目前的项目进展进行一个简单的小结。

对于python进行数据处理来说,pandas式一个不得不用的包,它比numpy很为强大。通过对《利用python进行数据分析》这本书中介绍pandas包的学习,再加以自己的理解,写下这篇随笔,与一起喜欢数据分析的朋友分享和相互学习。

import numpy as npimport pandas as pdfrompandasimport Series, DataFrame# 函数反应和映射df = DataFrame(np.random.randn(4,3), columns= list("bde"),

              index= ["Utah","Ohio","Texas","Oregon"])# print df# print np.abs(df)# 将函数应用到各列或行所形成的一维数组上。f =lambdax : x.max() - x.min()# 每一列的最大值减最小值# print df.apply(f, axis=0)# 每一行的最大值减最小值# print df.apply(f, axis=1)# 返回值由多个值组成的Seriesdef f(x):

    returnSeries([x.min(), x.max()], index=["min","max"])# print df.apply(f)# 保留两位小数点format =lambdax :"%.2f"% x# print df.applymap(format)# print df["e"].map(format)# 排序和排名obj = Series(np.arange(4.), index=["b","a","d","c"])# print obj.sort_index()frame = DataFrame(np.arange(8).reshape((2,4)),index=["three","one"],

                  columns=["d",'a','b','c'])# 按照索引的行进行排序# print frame.sort_index(axis=1)# 按照索引的列进行排序# print frame.sort_index(axis=0)# 按照值的列进行排序(必须传入一个列的索引且只能排列一组)# print frame.sort_values('b', axis=0, ascending=False)# 按照值的行进行排序(必须传入一个行的索引且只能排列一组)# print frame.sort_values("one", axis=1, ascending=False)# 根据多个列进行排序# print frame.sort_index(by=["a","b"])# 排名obj1 = Series([7,-5,7,4,2,0,4])# print obj1.rank()# 加减乘除  add代表加,sub代表减, div代表除法, mul代表乘法df1 = DataFrame(np.arange(12).reshape((3,4)), columns=list("abcd"))

df2 = DataFrame(np.arange(20).reshape((4,5)), columns=list("abcde"))# print df1 + df2# 将缺失值用0代替# print df1.add(df2, fill_value=0)# 再进行重新索引时,也可以指定一个填充值# print df1.reindex(columns=df2.columns, fill_value=0)data = {"state": ["Ohio","Ohio","Ohio","Nevada","Nevada"],

        "year": [2000, 2001, 2002, 2001, 2002],

        "pop": [1.5, 1.7, 3.6, 2.4, 2.9]}

frame = DataFrame(data)# print frame# 矩阵的横坐标# print frame.columns# 矩阵的纵坐标# print frame.index# 获取列通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:# print frame["state"]# print frame.year# 获取行也通过类似字典标记的方式或属性的方式,比如用索引字段ix# print frame.ix[3]# 修改列的内容frame["debt"] = 16.5# print frame# 精准匹配val = Series([-1.2, -1.5, -1.7], index=["two","four","five"])

frame.index = Series(['one','two','three','four','five'])

frame.debt = val# print frame# 为不存在的列赋值存在列中的某个值会创建出一个布尔列。关键字del用于删除列。frame["eastern"] = frame.state =="Ohio"# print framedelframe["eastern"]# 只能这样表示# print frame# 嵌套字典pop = {"Nevada": {2001 : 2.4, 2002 : 2.9},

        "Ohio": {2000 : 1.5, 2001 : 1.7, 2002 : 3.6}

        }# 传给DataFrame,它会被解释为:外层字典的键作为列,内层键则作为行索引frame2 = DataFrame(pop)# print frame2# 对该结果进行转置# print frame2.T# 内层字典的键会被合并、排序以形成最终的索引。frame3 = DataFrame(pop, index=[2001, 2002, 2003])# print frame3frame3.index.name ="year"; frame3.columns.name ="state"# print frame3# 重新索引obj = Series([4.5, 7.2, -5.3, 3.6], index=["d","b","a","c"])# reindex将会根据新索引进行重排。obj2 = obj.reindex(["a","b","c","d","e"])# print obj2# 将缺失值用0代替obj2 = obj.reindex(["a","b","c","d","e"], fill_value= 0)# print obj2# 插值处理--Seriesobj3 = Series(["blue","purple","yellow"], index=[0,2,4])# 前向填充ffill或pada = obj3.reindex(xrange(6), method="ffill")# print a# 后向填充bfill或backfillb = obj3.reindex(xrange(6), method="bfill")# print b# 插值处理--DataFrameimport numpy as np

f = DataFrame(np.arange(9).reshape((3,3)), index=["a","c","d"],

              columns=["Ohio","Texas","California"])# 改变行的索引f2 = f.reindex(["a","b","c","d"], fill_value=9)# print f2# 改变列的索引col = ["Texas","Utah","California"]

f3 = f.reindex(columns=col)# print f3# 同时改变列和行的索引f4 = f.reindex(["a","b","c","d"], method="ffill",

              columns=["Texas","Utah","California"])# print f4# 丢弃指定轴上的项--Seriesmys = Series(np.arange(5.), index=["a","b","c","d","e"])# print mys# drop()删除某个索引以及对应的值mys_new = mys.drop("c")# print mys_newmys_new1 = mys.drop(["c","e"])# print mys_new1# 丢弃指定轴上的项--DataFramedata = DataFrame(np.arange(16).reshape((4,4)),

                index=["Ohio","Colorado","Utah","New York"],

                columns=["one","two","three","four"])# 删除某行轴上的值data1 = data.drop(["Ohio","Utah"], axis=0)# axis=0代表行# print data1# 删除某列轴上的值data2 = data.drop(["one","three"], axis=1)# axis=1代表列# print data2obj = Series(range(5), index=['a','a','b','b','c'])# 使用is_unique属性可以知道他的值是否是唯一的print obj.index.is_unique# obj['a']df = DataFrame(np.random.randn(4, 3), index=['a','b','a','b'])printdf.ix["b", 1]printdf[1]

pandas中的索引高级处理:

frompandasimport Series, DataFrameimport pandas as pdimport numpy as np# 索引、选取和过滤--Seriesobj = Series(np.arange(4), index=["a","b","c","d"])# print obj["b"]# print obj[1]# print obj[2:4]# print obj[["b","a","d"]]# print obj[[1,3]]# print obj[obj < 2]# 利用标签的切片运算与普通的python切片运算不同,其末端是包含的# print obj["b":"c"]obj["b":"c"] = 5# print obj# 索引、选取和过滤--DataFramedata = DataFrame(np.arange(16).reshape((4, 4)),

                index=["Ohio","Colorado","Utah","New York"],

                columns=["one","two","three","four"])# 选取某列的值# print data["two"]# 选取多个列的值# print data[["two","one"]]# 通过切片或布尔型数组选取行的值a = data[:2]

b = data[data["three"] > 5]# data[data < 5] = 0# print data# 选取出列和行的值,用ix[行,列]c = data.ix["Ohio","two"]# print c, data# print data.ix["Ohio",["two","three"]]# 可以用数字代替列的轴# print data.ix[["Ohio","Colorado"],[3,0,1]]# 也可以用数字代替行的轴# print data.ix[[0,1],[3,0,1]]d = data.ix[:"Utah","two"]# 行中每个值大于5且前三列的值e = data.ix[data.three > 5, :3]# print e# Series的字符串表现形式为:索引在左边,值在右边。如果没有指定索引,那么默认从0到(N-1)的整数型索引。# 可以通过values和index属性获取数组的形式和索引。obj = Series([2,3,-6,7])# print obj# print obj.values# print obj.indexobj2 = Series([2,3,-6,7],index=["d","b","a","c"])# print obj2.index# print obj2["a"]obj2["d"] = 6# print obj2[["c","a","d"]]# print obj2[obj2 > 0 ]# print obj2 * 2# print np.exp(obj2)sdata = {"Ohio": 35000,"Texas": 71000,"Oregon": 16000,"Utah": 5000}# 直接用字典建立数组obj3 = Series(sdata)# 如果只传入一个字典,则结果Series中的索引就是原字典的键。states = ["California","Ohio","Oregon","Texas"]

obj4 = Series(sdata, index=states)# 上述obj4中California在对应的sdata中找不到对应值,所以用NaN表示(缺失值)# 检测是否有缺失值。pd.isnull(obj4)

pd.notnull(obj4)

obj4.isnull()# Series最重要的一个功能是:它在算术运算中会自动对齐不同的索引的数据。# print obj3 + obj4# Series对象和索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:obj4.name ="population"obj4.index.name ="state"# print obj4# Series的索引可以通过赋值的方式就地修改obj.index = ["Bob","Steve","Jeff","Ryan"]printobj

用pandas包进行简单的统计学计算:

import numpy as npimport pandas as pdfrompandasimport Series, DataFrame

df = DataFrame([[1.4, np.nan], [7.1, -4.5],

                [np.nan, np.nan],[0.75, -1.3]],

              index=['a','b','c','d'],

              columns=["one","two"])# print df.sum()# 传入axis=1将会按行进行求和运算# print df.sum(axis=1)# NA值会自动被排除,除非整个切片是NA值。可以通过skipna选项禁止这种功能d = df.mean(axis=1, skipna=False)

f =lambdax :"%.2f"% x# print d.apply(f)# 统计# 间接统计# print df.idxmax()# 累计型统计(前一项加后一项)# print df.cumsum()# 一次性汇总统计# print df.describe()# print df.min(axis=1)# 计算相关系数和协方差obj = DataFrame(np.random.randn(5,4),

                index=["2009-12-24","2009-12-28","2009-12-29","2009-12-30","2009-12-31"],

                columns=["AAPL","GOOG","IBM","MSFT"])

obj.index.name ="Data"# print obj# index 代表行, columns 代表列# corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相对系数。cov用于计算协方差:# print obj.MSFT.corr(obj.IBM)# print obj.MSFT.cov(obj.IBM)# 用于DataFrame的corr和cov# 相关系数# print obj.corr()# 协方差# print obj.cov()# 按列或行跟一个Series或Data Frame之间的相关系数# axis=1进行行进行计算# print obj.corrwith(obj.IBM)# 唯一值obj1 = Series(["c",'a','d','a','a','b','b','c','c'])

uniques = obj1.unique()# 加排序# print uniques.sort()# 计算出现的频率printobj1.value_counts()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,390评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,821评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,632评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,170评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,033评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,098评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,511评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,204评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,479评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,572评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,341评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,893评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,171评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,486评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,676评论 2 335

推荐阅读更多精彩内容