pandas库学习(七) 算术和数据对齐

2018-11-04  本文已影响0人  3ni

pandas在具有不同索引的对象间进行算术运算时,如果有任何的索引对不相同的话,在结果中将会把各自的索引联合起来,缺失的会被填充为NaN(可以修改)。
比如:
df1 = DataFrame(np.arange(9.).reshape((3,3)),columns=list('bcd'),index=['Ohio','Texas','Colorado'])

            b    c    d
Ohio      0.0  1.0  2.0
Texas     3.0  4.0  5.0
Colorado  6.0  7.0  8.0

df2 = DataFrame(np.arange(12.).reshape((4,3)),columns=list('bde'),index=['Utah','Ohio','Texas','Oregon'])

          b     d     e
Utah    0.0   1.0   2.0
Ohio    3.0   4.0   5.0
Texas   6.0   7.0   8.0
Oregon  9.0  10.0  11.0

df1+df2

            b   c     d   e
Colorado  NaN NaN   NaN NaN
Ohio      3.0 NaN   6.0 NaN
Oregon    NaN NaN   NaN NaN
Texas     9.0 NaN  12.0 NaN
Utah      NaN NaN   NaN NaN

上面结果只有在df1和df2中都有的才会有值,其它均被填充为NaN
df1.add(df2,fill_value=0)

            b    c     d     e
Colorado  6.0  7.0   8.0   NaN
Ohio      3.0  1.0   6.0   5.0
Oregon    9.0  NaN  10.0  11.0
Texas     9.0  4.0  12.0   8.0
Utah      0.0  NaN   1.0   2.0

这里为什么还是会有NaN,因为仔细看在df1中的Colorado,它只有bcd三列,但是没有e列,所以仍会被填充为NaN,如果在df1中也有e列,那么就不会是NaN
除了加法还有减法,乘法,除法
add 加法(+)
sub 减法(-)
div 除法(/)
mul 乘法(*)

然后看下面一个减法操作:
arr = np.arange(12.).reshape((3,4))

array([[ 0.,  1.,  2.,  3.],
       [ 4.,  5.,  6.,  7.],
       [ 8.,  9., 10., 11.]])

arr - arr[0]

array([[0., 0., 0., 0.],
       [4., 4., 4., 4.],
       [8., 8., 8., 8.]])

仔细看结果,结果是arr用每一行都减去arr[0],可以把这个看成一个二维的矩阵减去一维的数组,然后抽象出来就是高维减去低维的操作,低维会在高维中传播(一个个减),这样的现象就是广播
你用DataFrame对象去减Series对象也会出现这样的情况

上一篇 下一篇

猜你喜欢

热点阅读