Pandas的基本功能
1:reindex,其作用是创建一个适应新索引的新对象;drop 丢弃指定轴上的项
#调用Series的reindex将会根据新索引进行重排,如果索引值当前不存在,则引入缺失值NaN,但是可以用fill_value来进行填充 obj=Series([4.5,7.2,-5.3,-3.6],index=['b','a','d','c']) obj2=obj.reindex(['a','b','c','m','d'],fill_value=10.0) print(obj2) #对于类似于时间序列这种有序排列的数据,重新索引可能需要做一些差值操作 obj3=Series(['aaa',2012,'ccc'],index=[0,3,5]) obj4=obj3.reindex(range(6),method='ffill') obj5=obj3.reindex(range(6),method='backfill') print(obj4) print(obj5) #丢弃指定轴上的项,对于DataFrame,可以删除任意轴上的索引值;(numpy.reshape(重塑)给数组一个新的形状而不改变其数据),axis=0代表的是行,axis=1代表的是列,删除行的时候可以不加axis=0,因为其是索引,删除列的时候必须加axis=1 data_test1 =DataFrame(np.arange(16).reshape((4,4)),index=['a','b','c','d'],columns=['one','two','three','four']) print(data_test1) data_test2=data_test1.drop(['a','b'],axis=0) print(data_test2) data_test3=data_test1.drop('two',axis=1) print(data_test3)

2:算术运算和数据对齐
Pandas 最重要的一个功能是:它可以对不同索引的对象进行算术运算,在将对象相加时,如果存在不同的索引时,则结果的索引就是该索引对的并集,其索引和列为原来两个DataFrame的并集;
两个DataFrame相加除了A+B 之后可以用add方法,并可以将缺失值进行填充 fill_value;
add 用于加法,sub用于减法,div用于除法,mul用于乘法;
1 #对于DataFrame,对齐操作会同时发生在行和列上: 2 df1 = DataFrame(np.arange(9).reshape((3,3)),columns=list('bcd'),index=['aa','bb','cc']) 3 df2 = DataFrame(np.arange(12).reshape((4,3)),columns=list('bde'),index=['ee','aa','bb','cc']) 4 print(df1) 5 print(df2) 6 print(df1+df2) 7 #两个DataFrame相加除了A+B 之后可以用add方法,并可以将缺失值进行填充 8 df3 = df1.add(df2,fill_value=0) 9 print(df3) 10 #与此类似,在对Series或DataFrame重新索引时,也可以指定一个填充值 11 df4 = df1.reindex(columns=df2.columns,fill_value=0) 12 print(df4)
3:DataFrame和Series之间的运算
1 #DataFrame和Series之间的运算,DataFrame和Series之间的算术会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播,如果索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引形成并集 2 df1 = DataFrame(np.arange(12.).reshape((4,3)),columns=list('bde'),index=['aaa','bbb','ccc','ddd']) 3 ser3 = df1['d'] 4 df2 = df1.sub(ser3,axis =0) 5 print(df2)
4:函数应用和映射
1 #NumPy的ufuncs(元素级数组方法),也可用于操作Pandas对象, 2 #numpy.random.rand(d0,d1,…,dn),rand函数根据给定维度生成[0,1)之间的数据,包含0,不包含1,dn表格每个维度, 返回值为指定维度的array 3 df1 = DataFrame(np.random.randn(4,3),columns=list('bde'),index=['aaa','bbb','ccc','ddd']) 4 print(df1) 5 #numpy.random.randn(d0,d1,…,dn),randn函数返回一个或一组样本,具有标准正态分布。dn表格每个维度,返回值为指定维度的array, 标准正态分布又称为u分布,是以0为均值、以1为标准差的正态分布,记为N(0,1)。 6 df2 = DataFrame(np.random.randn(4,3),columns=list('bde'),index=['aaa','bbb','ccc','ddd']) 7 print(df2) 8 #取绝对值的方法 np.abs(df1) 9 df3 = np.abs(df1) 10 print(df3) 11 #将函数应用到由各列或行所形成的一维数组上,DataFrame的apply方法即可实现此功能, 12 # lambda 的用法, 13 # func = lambda x:x.max() -x.min() 14 # def func(x) 15 # return x.max() -x.min() 16 f = lambda x:x.max() -x.min() 17 print(df1.apply(f)) 18 print(df1.apply(f,axis=1))

5:排序和排名
1 #排序和排名 2 #根据条件对数据集排序(sorting)也是一种重要的内置运算,要对行或列索引进行排序,可使用sort_index方法,axis=0代表的是行,axis=1代表的是列 3 df1 = DataFrame(np.random.rand(4,4),columns=list('adcf'),index=[2015,2020,2010,2005]) 4 print(df1) 5 # a d c f 6 # 2015 0.421711 0.504037 0.658166 0.644887 7 # 2020 0.132616 0.971672 0.142527 0.669989 8 # 2010 0.327697 0.553400 0.099682 0.497841 9 # 2005 0.384310 0.012906 0.331220 0.519587 10 df2 = df1.sort_index(axis=0) 11 print(df2) 12 # a d c f 13 # 2005 0.384310 0.012906 0.331220 0.519587 14 # 2010 0.327697 0.553400 0.099682 0.497841 15 # 2015 0.421711 0.504037 0.658166 0.644887 16 # 2020 0.132616 0.971672 0.142527 0.669989 17 df3 = df1.sort_index(axis=0,ascending=False) 18 print(df3) 19 # a d c f 20 # 2020 0.132616 0.971672 0.142527 0.669989 21 # 2015 0.421711 0.504037 0.658166 0.644887 22 # 2010 0.327697 0.553400 0.099682 0.497841 23 # 2005 0.384310 0.012906 0.331220 0.519587 24 df4 = df1.sort_index(axis=1) 25 print(df4) 26 # a c d f 27 # 2015 0.421711 0.658166 0.504037 0.644887 28 # 2020 0.132616 0.142527 0.971672 0.669989 29 # 2010 0.327697 0.099682 0.553400 0.497841 30 # 2005 0.384310 0.331220 0.012906 0.519587 31 32 #如果箱根据一个或多个列中的值进行排序,将一个或多个列的名字传递给by选项即可达到该目的,也可以根据多个列进行排序,排序方式按照先后顺序进行排序 33 df5 = df1.sort_index(by = ['a','d']) 34 print(df5) 35 # a d c f 36 # 2005 0.032102 0.435863 0.737985 0.063240 37 # 2010 0.457912 0.001250 0.523532 0.596016 38 # 2015 0.743695 0.140491 0.032205 0.140927 39 # 2020 0.929999 0.724933 0.470512 0.022944 40 #排名(ranking),rank是通过“为各组分配一个平均排名”的方式破坏平级关系的 41 obj = Series([7,-5,7,4,5,0]) 42 print(obj.rank()) 43 #解释下:rank表示在这个数在原来的series中排第几名,由相同的数取其平均作为默认值 44 # 0 5.5 45 # 1 1.0 46 # 2 5.5 47 # 3 3.0 48 # 4 4.0 49 # 5 2.0 50 # dtype: float64 51 print(obj.rank(ascending=False,method='first')) 52 # 0 1.0 53 # 1 6.0 54 # 2 2.0 55 # 3 4.0 56 # 4 3.0 57 # 5 5.0 58 # dtype: float64 59 #排名时用于破坏平级关系的method选项 60 # ‘average’ 默认:在相等分组中,为各个值分配平均排名 61 # ‘min’使用整个分组的最小排名 62 # ‘max’使用整个分组的最大排名 63 # ‘first’按值在原始数据中的出现顺序分配排名

浙公网安备 33010602011771号