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