W
e
l
c
o
m
e
: )

10.算数和广播

算数和广播:

当对两个Series或者DataFrame对象进行算术运算的时候返回的结果是两个对象的并集。如果存在某个索引不匹配时,将以缺失值NaN的方式体现,并对以后的操作产生影响。这类似数据库的外连接操作。

Series:

sarr1 = pd.Series(np.arange(5), index=list('abcde'))
sarr2 = pd.Series(np.arange(5, 10), index=list('abcde'))
print('------sarr1')
print(sarr1)
print('------sarr2')
print(sarr2)
print('------相减')
print(sarr2 - sarr1)
print('------相乘')
print(sarr1 * sarr2)

#---------------
------sarr1
a    0
b    1
c    2
d    3
e    4
dtype: int32
------sarr2
a    5
b    6
c    7
d    8
e    9
dtype: int32
------相减
a    5
b    5
c    5
d    5
e    5
dtype: int32
------相乘
a     0
b     6
c    14
d    24
e    36
dtype: int32

DataFrame:

sarr1 = pd.DataFrame(np.arange(25).reshape(5, 5), index=['one', 'two', 'three', 'four', 'five'], columns=list('abcde'))
sarr2 = pd.DataFrame(np.arange(10, 35).reshape(5, 5), index=[1, 2, 'two', 'four', 5],
                     columns=list('cdeba'))
print('------sarr1')
print(sarr1)
print('------sarr2')
print(sarr2)
print('------相加')
print(sarr2 + sarr1)

#-------------------------
------sarr1
        a   b   c   d   e
one     0   1   2   3   4
two     5   6   7   8   9
three  10  11  12  13  14
four   15  16  17  18  19
five   20  21  22  23  24
------sarr2
       c   d   e   b   a
1     10  11  12  13  14
2     15  16  17  18  19
two   20  21  22  23  24
four  25  26  27  28  29
5     30  31  32  33  34
------相加
          a     b     c     d     e
1       NaN   NaN   NaN   NaN   NaN
2       NaN   NaN   NaN   NaN   NaN
5       NaN   NaN   NaN   NaN   NaN
five    NaN   NaN   NaN   NaN   NaN
four   44.0  44.0  42.0  44.0  46.0
one     NaN   NaN   NaN   NaN   NaN
three   NaN   NaN   NaN   NaN   NaN
two    29.0  29.0  27.0  29.0  31.0

在上述过程中,为了防止NaN对后续的影响,很多时候我们要使用一些填充值:

类似add的方法还有:

  • add:加法
  • sub:减法
  • div:除法
  • floordiv:整除
  • mul:乘法
  • pow:幂次方

DataFrame也可以和Series进行操作,这类似于numpy中不同维度数组间的操作,其中将使用广播机制。我们先看看numpy中的机制:

# numpy 算数和广播
arr = np.arange(12).reshape(3, 4)
print(arr)

# 取第一行,一维数据
print('取第一行')
print(arr[0])

# 广播机制
print('广播机制二维减去一维')
print(arr - arr[0])


# 结果:
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
取第一行
[0 1 2 3]
广播机制二维减去一维
[[0 0 0 0]
 [4 4 4 4]
 [8 8 8 8]]

DataFrame和Series之间的操作是类似的:

arr = pd.DataFrame(np.arange(12).reshape(4, 3), columns=list('bde'), index=['one', 'two', 'three', 'four'])
print('----原数组')
print(arr)
#  取第一行
print('取第一行')
arr_1 = arr.iloc[0]
print(arr_1)
print('广播机制相减')
print(arr - arr_1)

# 如果存在不匹配列,则会引入缺失值
print('如果存在不匹配列,则会引入缺失值')
arr2 = pd.Series(range(3), index=list('bef'))
print(arr2 + arr)



# 结果
----原数组
       b   d   e
one    0   1   2
two    3   4   5
three  6   7   8
four   9  10  11
取第一行
b    0
d    1
e    2
Name: one, dtype: int32
广播机制相减
       b  d  e
one    0  0  0
two    3  3  3
three  6  6  6
four   9  9  9
如果存在不匹配列,则会引入缺失值
         b   d     e   f
one    0.0 NaN   3.0 NaN
two    3.0 NaN   6.0 NaN
three  6.0 NaN   9.0 NaN
four   9.0 NaN  12.0 NaN

也可以通过axis=0,axis=1指定列和行。

posted @ 2020-04-24 08:24  水一RAR  阅读(49)  评论(0编辑  收藏  举报