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(01)。
 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’按值在原始数据中的出现顺序分配排名

 

   

 

posted @ 2018-03-21 22:24  MoonSky007  阅读(372)  评论(0)    收藏  举报