Python Pandas 數據合併/融合 merge 數據過濾 isin
Pandas 數據合併/融合,數據過濾
數據準備:
import pandas as pd
# 假設有 5 個人,分別參加了 4 門課程,獲得了對應的分數
# 同時這個 5 個人分別負責的項目個數 在 'Project_num' 列中顯示
data_1 = {'name' : pd.Series(['Alice', 'Bob', 'Cathy', 'Dany', 'Ella']),
'English' : pd.Series([3, 2.6, 2, 1.7, 3]),
}
data_2 = {'name' : pd.Series(['Alice', 'Bob', 'Cathy', 'Dany', 'Ford']),
'Math' : pd.Series([1.1, 2.2, 3.3, 4.4, 5]),
}
df_1 = pd.DataFrame(data_1)
df_2 = pd.DataFrame(data_2)
print('df_1)
print('\n')
print(df_2)
print('\n')
運行結果:
df_1:
name English
0 Alice 3.0
1 Bob 2.6
2 Cathy 2.0
3 Dany 1.7
4 Ella 3.0
df_2:
name Math
0 Alice 1.1
1 Bob 2.2
2 Cathy 3.3
3 Dany 4.4
4 Ford 5.0
一、數據合併 pd.merge
1.1 把右邊的數據融合到左邊
df_3 = pd.merge(df_1, df_2, how = 'left', on = 'name')
# 將 df_2 融合進 df_1,以 'name' 這一列為篩選原則
# 我們可以 同時對多列進行篩選 on = ['column_1', 'column_2']
print(df_3)
print('\n')
運行結果:
name English Math
0 Alice 3.0 1.1
1 Bob 2.6 2.2
2 Cathy 2.0 3.3
3 Dany 1.7 4.4
4 Ella 3.0 NaN
1.2 把左邊的數據融合到右邊
df_3 = pd.merge(df_1, df_2, how = 'right', on = 'name')
# 將 df_1 融合進 df_2,以 'name' 這一列為篩選原則
print(df_3)
print('\n')
運行結果:
name English Math
0 Alice 3.0 1.1
1 Bob 2.6 2.2
2 Cathy 2.0 3.3
3 Dany 1.7 4.4
4 Ford NaN 5.0
1.3 取交集
df_3 = pd.merge(df_1, df_2, how = 'inner', on = 'name')
# 默認為取交集
print(df_3)
print('\n')
運行結果:
name English Math
0 Alice 3.0 1.1
1 Bob 2.6 2.2
2 Cathy 2.0 3.3
3 Dany 1.7 4.4
1.4 取並集
df_3 = pd.merge(df_1, df_2, how = 'outer', on = 'name')
print(df_3)
print('\n')
運行結果:
name English Math
0 Alice 3.0 1.1
1 Bob 2.6 2.2
2 Cathy 2.0 3.3
3 Dany 1.7 4.4
4 Ella 3.0 NaN
5 Ford NaN 5.0
二、數據過濾 isin
2.1 對原數據集進行篩選,留下與新數據集交集的行數據
df_4 = df_1[df_1.name.isin(df_2.name)]
print(df_4)
print('\n')
運行結果:
name English
0 Alice 3.0
1 Bob 2.6
2 Cathy 2.0
3 Dany 1.7
2.2 對原數據集進行篩選,去除與新數據集交集的行數據(留下不在新數據集中的行)
df_4 = df_1[~df_1.name.isin(df_2.name)]
print(df_4)
print('\n')
運行結果:
name English
4 Ella 3.0