12. pandas 的对齐操作
四种主要的运算:加add()
,减sub()
,乘mul()
,除div()
12.1 series的对齐操作
12.1.1 加法
>>> import numpy as np
>>> import pandas as pd
>>> ser1 = pd.Series(data=range(10,15),index=list('abcde'))
>>> ser2 = pd.Series(data=range(20,25),index=list('cdefg'))
>>> ser1
a 10
b 11
c 12
d 13
e 14
dtype: int64
>>> ser2
c 20
d 21
e 22
f 23
g 24
dtype: int64
>>> ser1.add(ser2)
a NaN
b NaN
c 32.0
d 34.0
e 36.0
f NaN
g NaN
dtype: float64
>>> ser2.add(ser1)
a NaN
b NaN
c 32.0
d 34.0
e 36.0
f NaN
g NaN
dtype: float64
>>> ser1.add(ser2,fill_value=10) # 没有的值用10来填充
a 20.0
b 21.0
c 32.0
d 34.0
e 36.0
f 33.0
g 34.0
dtype: float64
注意点:
series
对象在进行相加操作的时候,他会将相同索引的对应的值进行相加操作- 如果索引不同的话,就会使用
NaN
值进行填充操作 fill_value
这个参数指定一个填充值,如果没有相同的索引,可以使用填充值进行操作
12.1.2 其他
# 减法
>>> ser1.sub(ser2)
a NaN
b NaN
c -8.0
d -8.0
e -8.0
f NaN
g NaN
dtype: float64
>>> ser2.sub(ser1,fill_value=0)
a -10.0
b -11.0
c 8.0
d 8.0
e 8.0
f 23.0
g 24.0
dtype: float64
# 除法
>>> ser1.div(ser2)
a NaN
b NaN
c 0.600000
d 0.619048
e 0.636364
f NaN
g NaN
dtype: float64
12.2 dataframe的对齐操作
12.2.1 加法
>>> df1 = pd.DataFrame(np.arange(11,20).reshape(3,3),columns=list('ABC'))
>>> df2 = pd.DataFrame(np.arange(20,40).reshape(4,5),columns=list('ABCDE'))
>>> print(df1)
A B C
0 11 12 13
1 14 15 16
2 17 18 19
>>> print(df2)
A B C D E
0 20 21 22 23 24
1 25 26 27 28 29
2 30 31 32 33 34
3 35 36 37 38 39
>>> df3 = df1.add(df2,fill_value=0)
>>> df3
A B C D E
0 31.0 33.0 35.0 23.0 24.0
1 39.0 41.0 43.0 28.0 29.0
2 47.0 49.0 51.0 33.0 34.0
3 35.0 36.0 37.0 38.0 39.0
注意点:和series对象的相加是一样的,不需要是相同的数据
12.3 dataframe与series的对齐操作
>>> ser3 = pd.Series(data=range(10,15),index=list('ABCDE'))
>>> ser3
A 10
B 11
C 12
D 13
E 14
dtype: int64
>>> df2.add(ser3,axis='columns')
A B C D E
0 30 32 34 36 38
1 35 37 39 41 43
2 40 42 44 46 48
3 45 47 49 51 53
>>> df2.add(ser3,axis='index')
A B C D E
0 NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN
3 NaN NaN NaN NaN NaN
A NaN NaN NaN NaN NaN
B NaN NaN NaN NaN NaN
C NaN NaN NaN NaN NaN
D NaN NaN NaN NaN NaN
E NaN NaN NaN NaN NaN