
1. DataFrame之間的運算
-
在運算中自動對齊不同索引的數據
-
如果索引不對應,則補NaN
-
DataFrame沒有廣播機制
導包
# 導包
import numpy as np
import pandas as pd
創建 DataFrame df1 不同人員的各科目成績,月考一
# 創建DataFrame二維數組
df1 = pd.DataFrame(
data = np.random.randint(10,100,size=(3,3)),
index = ["小明","小紅","小黃"],
columns = ["語文","數學","英語"]
)
df1
| 語文 | 數學 | 英語 |
---|
小明 | 59 | 26 | 58 |
---|
小紅 | 14 | 74 | 53 |
---|
小黃 | 49 | 28 | 99 |
---|
創建 DataFrame df2 不同人員的各科目成績,月考二
df2 = pd.DataFrame(
data = np.random.randint(10,100,size=(3,3)),
index = ["小明","小紅","小黃"],
columns = ["語文","數學","英語"]
)
df2
| 語文 | 數學 | 英語 |
---|
小明 | 55 | 71 | 13 |
---|
小紅 | 42 | 49 | 55 |
---|
小黃 | 34 | 68 | 36 |
---|
DataFrame和標量之間的運算
df1?+?100
| 語文 | 數學 | 英語 |
---|
小明 | 159 | 126 | 158 |
---|
小紅 | 114 | 174 | 153 |
---|
小黃 | 149 | 128 | 199 |
---|
df1 - 100
| 語文 | 數學 | 英語 |
---|
小明 | -41 | -74 | -42 |
---|
小紅 | -86 | -26 | -47 |
---|
小黃 | -51 | -72 | -1 |
---|
df1 * 100
| 語文 | 數學 | 英語 |
---|
小明 | 5900 | 2600 | 5800 |
---|
小紅 | 1400 | 7400 | 5300 |
---|
小黃 | 4900 | 2800 | 9900 |
---|
df1 / 100
| 語文 | 數學 | 英語 |
---|
小明 | 0.59 | 0.26 | 0.58 |
---|
小紅 | 0.14 | 0.74 | 0.53 |
---|
小黃 | 0.49 | 0.28 | 0.99 |
---|
df1 % 10
df1 ** 2
語文 | 數學 | 英語 | |
---|
小明 | 3481 | 676 | 3364 |
---|
小紅 | 196 | 5476 | 2809 |
---|
小黃 | 2401 | 784 | 9801 |
---|
DataFrame之間的運算
# 必須匹配行和列的索引
df1?+?df2
| 語文 | 數學 | 英語 |
---|
小明 | 84 | 50 | 116 |
---|
小紅 | 85 | 144 | 145 |
---|
小黃 | 121 | 115 | 179 |
---|
使用 .add() 函數,填充數據
df3?=?pd.DataFrame(
data = np.random.randint(10,100,size=(4,4)),
index = ["小明","小紅","小黃","小綠"],
columns = ["語文","數學","英語","物理"]
)
display(df1,df3)
?
| 語文 | 數學 | 英語 |
---|
小明 | 59 | 26 | 58 |
---|
小紅 | 14 | 74 | 53 |
---|
小黃 | 49 | 28 | 99 |
---|
| 語文 | 數學 | 英語 | 物理 |
---|
小明 | 30 | 40 | 59 | 59 |
---|
小紅 | 46 | 72 | 56 | 96 |
---|
小黃 | 25 | 20 | 99 | 73 |
---|
小綠 | 92 | 78 | 41 | 44 |
---|
df1?+?df3
?
| 數學 | 物理 | 英語 | 語文 |
---|
小明 | 66.0 | NaN | 117.0 | 89.0 |
---|
小紅 | 146.0 | NaN | 109.0 | 60.0 |
---|
小綠 | NaN | NaN | NaN | NaN |
---|
小黃 | 48.0 | NaN | 198.0 | 74.0 |
---|
# 先填充0,再相加
df1.add(df3,fill_value=0)
| 數學 | 物理 | 英語 | 語文 |
---|
小明 | 66.0 | 59.0 | 117.0 | 89.0 |
---|
小紅 | 146.0 | 96.0 | 109.0 | 60.0 |
---|
小綠 | 78.0 | 44.0 | 41.0 | 92.0 |
---|
小黃 | 48.0 | 73.0 | 198.0 | 74.0 |
---|
# 除法
df1.divide(df3,fill_value=2)
| 數學 | 物理 | 英語 | 語文 |
---|
小明 | 0.650000 | 0.033898 | 0.983051 | 1.966667 |
---|
小紅 | 1.027778 | 0.020833 | 0.946429 | 0.304348 |
---|
小綠 | 0.025641 | 0.045455 | 0.048780 | 0.021739 |
---|
小黃 | 1.400000 | 0.027397 | 1.000000 | 1.960000 |
---|
2. Series與DataFrame之間的運算
s = pd.Series([100,10,1],index=df1.columns)
s
語文 100
數學 10
英語 1
dtype: int64
df1?+?s
| 語文 | 數學 | 英語 |
---|
小明 | 159 | 36 | 59 |
---|
小紅 | 114 | 84 | 54 |
---|
小黃 | 149 | 38 | 100 ? |
---|
df1.add(s)
| 語文 | 數學 | 英語 |
---|
小明 | 159 | 36 | 59 |
---|
小紅 | 114 | 84 | 54 |
---|
小黃 | 149 | 38 | 100 |
---|
# axis:(0 or "index",1 or "columns"),默認為列
df1.add(s,axis="columns")
| 語文 | 數學 | 英語 |
---|
小明 | 159 | 36 | 59 |
---|
小紅 | 114 | 84 | 54 |
---|
小黃 | 149 | 38 | 100 |
---|
df1.add(s,axis=1)
?
| 語文 | 數學 | 英語 |
---|
小明 | 159 | 36 | 59 |
---|
小紅 | 114 | 84 | 54 |
---|
小黃 | 149 | 38 | 100 |
---|
s = pd.Series([100,10,1],index=df1.index)
s
小明 100
小紅 10
小黃 1
dtype: int64
# 行
df1.add(s,axis=0)
| 語文 | 數學 | 英語 |
---|
小明 | 159 | 126 | 158 |
---|
小紅 | 24 | 84 | 63 |
---|
小黃 | 50 | 29 | 100 |
---|
df1.add(s,axis="index")
| 語文 | 數學 | 英語 |
---|
小明 | 159 | 126 | 158 |
---|
小紅 | 24 | 84 | 63 |
---|
小黃 | 50 | 29 | 100 |
---|