pandas可以对不同索引的对象进行算术运算,如果存在不同的索引对,结果的索引就是该索引对的并集。
一、算术运算
a、series的加法运算
1
2
3
4
5
6
7
8
9
|
s1 = Series([ 1 , 2 , 3 ],index = [ "a" , "b" , "c" ])
s2 = Series([ 4 , 5 , 6 ],index = [ "a" , "c" , "e" ])
print (s1 + s2)
'''
a 5.0
b NaN
c 8.0
e NaN
'''
|
sereis相加会自动进行数据对齐操作,在不重叠的索引处会使用NA(NaN)值进行填充,series进行算术运算的时候,不需要保证series的大小一致。
b、DataFrame的加法运算
1
2
3
4
5
6
7
8
9
10
11
12
|
d1 = np.arange( 1 , 10 ).reshape( 3 , 3 )
dataFrame1 = DataFrame(d1,index = [ "a" , "b" , "c" ],columns = [ "one" , "two" , "three" ])
d2 = np.arange( 1 , 10 ).reshape( 3 , 3 )
dataFrame2 = DataFrame(d2,index = [ "a" , "b" , "e" ],columns = [ "one" , "two" , "four" ])
print (dataFrame1 + dataFrame2)
'''
four one three two
a NaN 2.0 NaN 4.0
b NaN 8.0 NaN 10.0
c NaN NaN NaN NaN
e NaN NaN NaN NaN
'''
|
dataFrame相加时,对齐操作需要行和列的索引都重叠的时候才回相加,否则会使用NA值进行填充。
二、指定填充值
1
2
3
4
5
6
7
8
9
|
s1 = Series([ 1 , 2 , 3 ],index = [ "a" , "b" , "c" ])
s2 = Series([ 4 , 5 , 6 ],index = [ "a" , "c" , "e" ])
print ( s1.add(s2,fill_value = 0 ))
'''
a 5.0
b 2.0
c 8.0
e 6.0
'''
|
需要注意的时候,使用add方法对两个series进行相加的时候,设置fill_value的值是对于不存在索引的series用指定值进行填充后再进行相加。除了加法add,还有sub减法,div除法,mul乘法,使用方式与add相同。DataFrame与series一样。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
s1 = Series([ 1 , 2 , 3 ],index = [ "a" , "b" , "c" ])
s2 = Series([ 4 , 5 , 6 ],index = [ "a" , "c" , "e" ])
print (s2.reindex([ "a" , "b" , "c" , "d" ],fill_value = 0 ))
'''
a 4
b 0
c 5
d 0
'''
s3 = s1 + s2
print (s3.reindex([ "a" , "b" , "c" , "e" ],fill_value = 0 ))
'''
a 5.0
b NaN
c 8.0
e NaN
'''
|
使用reindex进行填充的时候,需要注意的是,不能对已经是值为NaN的进行重新赋值,只能对使用reindex之前不存在的所以使用指定的填充值,DataFrame也是一样的。
三、DataFrame与Series的混合运算
a、DataFrame的行进行广播
1
2
3
4
5
6
7
8
9
10
11
|
a = np.arange( 9 ).reshape( 3 , 3 )
d = DataFrame(a,index = [ "a" , "b" , "c" ],columns = [ "one" , "two" , "three" ])
#取d的第一行为Series
s = d.ix[ 0 ]
print (d + s)
'''
one two three
a 0 2 4
b 3 5 7
c 6 8 10
'''
|
b、DataFrame的列进行广播
1
2
3
4
5
6
7
8
9
10
11
|
a = np.arange( 9 ).reshape( 3 , 3 )
d = DataFrame(a,index = [ "a" , "b" , "c" ],columns = [ "one" , "two" , "three" ])
#取d的第一列为Series
s = d[ "one" ]
print (d.add(s,axis = 0 ))
'''
one two three
a 0 1 2
b 6 7 8
c 12 13 14
'''
|
对列进行广播的时候,必须要使用add方法,而且还要将axis设置为0,不然就会得到下面的结果
1
2
3
4
5
6
7
|
print (d.add(s))
'''
a b c one three two
a NaN NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN NaN
'''
|
以上这篇对pandas的算术运算和数据对齐实例详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/sinat_29957455/article/details/78989104