Pandas数据类型运算

算术运算法则:

1.算术运算根据行列索引,补齐后运算,运算默认产生浮点数。

2.补齐时缺项填充NaN(空值)。(标签相同的进行运算,标签不同的补齐)

3.二维和一维,一维和零维间为广播运算。

4.采用+-*/符号进行的二元运算产生新的对象。

 1 import pandas as pd
 2 import numpy as np
 3 
 4 a=pd.DataFrame(np.arange(12).reshape(3,4))
 5 
 6 a
 7 Out[3]: 
 8    0  1   2   3
 9 0  0  1   2   3
10 1  4  5   6   7
11 2  8  9  10  11
12 
13 b=pd.DataFrame(np.arange(20).reshape(4,5))
14 
15 b
16 Out[6]: 
17     0   1   2   3   4
18 0   0   1   2   3   4
19 1   5   6   7   8   9
20 2  10  11  12  13  14
21 3  15  16  17  18  19
22 
23 a+b
24 Out[7]: 
25       0     1     2     3   4
26 0   0.0   2.0   4.0   6.0 NaN
27 1   9.0  11.0  13.0  15.0 NaN
28 2  18.0  20.0  22.0  24.0 NaN
29 3   NaN   NaN   NaN   NaN NaN
30 
31 a*b
32 Out[8]: 
33       0     1      2      3   4
34 0   0.0   1.0    4.0    9.0 NaN
35 1  20.0  30.0   42.0   56.0 NaN
36 2  80.0  99.0  120.0  143.0 NaN
37 3   NaN   NaN    NaN    NaN NaN #标签相同的进行运算,不同的补齐后运算,补齐的NaN与任何元素运算结果都是NaN

数据的算术运算之方法形式的运算

 

# 分别对应加减乘除,可以增加一些个性参数,只能针对方法性操作才有用

 1 a.add(b,fill_value=100) # 用100补齐代替NaN
 2 Out[9]: 
 3        0      1      2      3      4
 4 0    0.0    2.0    4.0    6.0  104.0
 5 1    9.0   11.0   13.0   15.0  109.0
 6 2   18.0   20.0   22.0   24.0  114.0
 7 3  115.0  116.0  117.0  118.0  119.0
 8 
 9 b.add(a,fill_value=100)
10 Out[10]: 
11        0      1      2      3      4
12 0    0.0    2.0    4.0    6.0  104.0
13 1    9.0   11.0   13.0   15.0  109.0
14 2   18.0   20.0   22.0   24.0  114.0
15 3  115.0  116.0  117.0  118.0  119.0
16 
17 a.sub(b,fill_value=100)
18 Out[11]: 
19       0     1     2     3     4
20 0   0.0   0.0   0.0   0.0  96.0
21 1  -1.0  -1.0  -1.0  -1.0  91.0
22 2  -2.0  -2.0  -2.0  -2.0  86.0
23 3  85.0  84.0  83.0  82.0  81.0
24 
25 b.sub(a,fill_value=100)
26 Out[12]: 
27       0     1     2     3     4
28 0   0.0   0.0   0.0   0.0 -96.0
29 1   1.0   1.0   1.0   1.0 -91.0
30 2   2.0   2.0   2.0   2.0 -86.0
31 3 -85.0 -84.0 -83.0 -82.0 -81.0

不同维度间为广播运算,一维Series默认在轴1(横轴每一行)参与运算

 1 b
 2 Out[13]: 
 3     0   1   2   3   4
 4 0   0   1   2   3   4
 5 1   5   6   7   8   9
 6 2  10  11  12  13  14
 7 3  15  16  17  18  19
 8 
 9 c=pd.Series(np.arange(4))
10 
11 c
12 Out[15]: 
13 0    0
14 1    1
15 2    2
16 3    3
17 dtype: int32
18 
19 c-10
20 Out[16]: 
21 0   -10
22 1    -9
23 2    -8
24 3    -7
25 dtype: int32
26 
27 b-c
28 Out[17]: 
29       0     1     2     3   4
30 0   0.0   0.0   0.0   0.0 NaN
31 1   5.0   5.0   5.0   5.0 NaN
32 2  10.0  10.0  10.0  10.0 NaN
33 3  15.0  15.0  15.0  15.0 NaN # 默认在轴1运算,即每一行都减去一维值
1 b.sub(c,axis=0) #可通过方法运算规定运算轴,使得每一列运算
2 Out[18]: 
3     0   1   2   3   4
4 0   0   1   2   3   4
5 1   4   5   6   7   8
6 2   8   9  10  11  12
7 3  12  13  14  15  16

 

比较运算法则

1.比较运算只比较相同维度的的元素,不进行补齐。

2.二维和一维、一维和零维之间进行广播运算。

3.采用><>=<===!=等符号进行的二元运算产生布尔对象。

 1 a
 2 Out[22]: 
 3    0  1   2   3
 4 0  0  1   2   3
 5 1  4  5   6   7
 6 2  8  9  10  11
 7 
 8 c
 9 Out[23]: 
10 0    0
11 1    1
12 2    2
13 3    3
14 dtype: int32
15 
16 a>c 
17 Out[24]: 
18        0      1      2      3
19 0  False  False  False  False #不同维度,广播运算,默认在一轴
20 1   True   True   True   True
21 2   True   True   True   True

 

posted @ 2019-03-10 10:55  神不咙哚儿  阅读(388)  评论(0编辑  收藏  举报