DataFrame和Series之间的算术运算
DataFrame和Series之间的算术运算与NumPy数组运算一样都有明确规定,具体示例如下所示:
In [40]: import numpy as np
In [41]: from pandas import Series,DataFrame
In [42]: f = DataFrame(np.arange(12).reshape(4,3),index =
...: ['qian','feng','jiao','yu'],columns = ['a','b','c'])
In [43]: se = f.loc['qian']
In [44]: se1 = Series(range(3),index = ['b','c','d'])
In [45]: se2 = f['b']
In [46]: f1 = f - se
In [47]: f2 = f + se1
In [48]: f3 = f.sub(se2,axis = 0)
上述代码是DataFrame和Series之间的算术运算,其中In [43]是使用loc获取f中行索引为“qian”的数据,并将其赋值给变量se;In [45]是获取f中列索引为“b”的数据,并将其赋值给变量se2;In [46]是计算对象f与对象se的差,并将计算结果赋值给变量f1;In [47]是计算对象f与对象se1的和,并将计算结果赋值给变量f2;In [48]是计算对象f与对象se2的差,并将计算结果赋值给变量f3。各变量的运行结果如下所示:
In [49]: f
Out[49]:
a b c
qian 0 1 2
feng 3 4 5
jiao 6 7 8
yu 9 10 11
In [50]: se
Out[50]:
a 0
b 1
c 2
Name: qian, dtype: int32
In [51]: se1
Out[51]:
b 0
c 1
d 2
dtype: int64
In [52]: se2
Out[52]:
qian 1
feng 4
jiao 7
yu 10
Name: b, dtype: int32
In [53]: f1
Out[53]:
a b c
qian 0 0 0
feng 3 3 3
jiao 6 6 6
yu 9 9 9
In [54]: f2
Out[54]:
a b c d
qian NaN 1.0 3.0 NaN
feng NaN 4.0 6.0 NaN
jiao NaN 7.0 9.0 NaN
yu NaN 10.0 12.0 NaN
In [55]: f3
Out[55]:
a b c
qian -1 0 1
feng -1 0 1
jiao -1 0 1
yu -1 0 1
从上述运行结果可看出,默认情况下的f1是将Series对象的索引直接匹配到DataFrame对象的列,然后沿着行往下一直广播(矩阵或向量减去一个常数,一般是矩阵中的每一个元素减去此常数)。当在DataFrame的列索引或Series对象的索引中匹配不成功,则参与运算的两个对象会被重新索引并形成并集,如f2中f1与se1的加法运算。若既要匹配行,又要在列上广播,则需要使用算术运算方法,如f3。
上述示例中使用了Pandas中的算术方法sub,用于不同对象中的减法运算,Pandas中还有很多类似的算术方法,具体如表4.6所示。
方法 | 说明 |
---|---|
add | 用于加法(+)运算的方法 |
sub | 用于减法(-)运算的方法 |
mul | 用于乘法(*)运算的方法 |
div | 用于除法(/)运算的方法 |
网友评论