1、算术运算和数据对齐
(1)对不同索引的对象进行算数运算
在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。
s1 = Series([7,2,-2,4],index=['a','b','c','d'])
s2 = Series([-2,3,-1,4,3],index=['a','b','c','f','g'])
s1
s2
s1+s2
Out[17]:
a 5.0
b 5.0
c -3.0
d NaN
f NaN
g NaN
dtype: float64
自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播。
对于DataFrame,对齐操作会同时发生在行和列上:
df1 = DataFrame(np.arange(9.).reshape((3,3)),columns=list('bcd'),index=['A','B','C'])
df2 = DataFrame(np.arange(12.).reshape((4,3)),columns=list('bde'),index=['A','C','D','E'])
df1
Out[21]:
b c d
A 0.0 1.0 2.0
B 3.0 4.0 5.0
C 6.0 7.0 8.0
df2
Out[22]:
b d e
A 0.0 1.0 2.0
C 3.0 4.0 5.0
D 6.0 7.0 8.0
E 9.0 10.0 11.0
df1+df2
Out[23]:
b c d e
A 0.0 NaN 3.0 NaN
B NaN NaN NaN NaN
C 9.0 NaN 12.0 NaN
D NaN NaN NaN NaN
E NaN NaN NaN NaN
(2)在算数方法中填充值
在对不同索引的对象进行算数运算时,当一个对象中某个轴标签在另一个对象中找不到时填充一个特殊值(比如0):
使用df1的add方法,传入df2以及一个fill_value参数:
df1.add(df2,fill_value=0)
Out[24]:
b c d e
A 0.0 1.0 3.0 2.0
B 3.0 4.0 5.0 NaN
C 9.0 7.0 12.0 5.0
D 6.0 NaN 7.0 8.0
E 9.0 NaN 10.0 11.0
与此类似,在对Series或DataFrame重新索引时,也可以指定一个填充值:
add | 用于加法(+)的方法 |
sub | 用于减法(-)的方法 |
div | 用于除法(/)的方法 |
mul | 用于乘法(*)的方法 |
(3)DataFrame和Series之间的运算
跟NumPy数组一样,DataFrame和Series之间算术运算有规定。
①计算一个二维数组与其某行之间的差