指定參考列,以該列為準,合併其他欄位。
import pandas as pd df1 = pd.DataFrame({'id': ['001', '002', '003'], 'num1': [120, 101, 104], 'num2': [110, 102, 121], 'num3': [105, 120, 113]}) df2 = pd.DataFrame({'id': ['001', '002', '003'], 'num4': [80, 86, 79]}) print(df1) print("=======================================") print(df2) print("=======================================") df_merge = pd.merge(df1, df2, on='id') print(df_merge)
#要實現該合併,也可以透過索引來合併,即以index列為基準。將left_index 和 right_index 都設定為True
即可。 (left_index 和right_index 都預設為False,left_index表示左表以左表資料的index為基準, right_index表示右表以右表資料的index為基準。)
import pandas as pd df1 = pd.DataFrame({'id': ['001', '002', '003'], 'num1': [120, 101, 104], 'num2': [110, 102, 121], 'num3': [105, 120, 113]}) df2 = pd.DataFrame({'id': ['001', '002', '003'], 'num4': [80, 86, 79]}) print(df1) print("=======================================") print(df2) print("=======================================") df_merge = pd.merge(df1, df2, left_index=True, right_index=True) print(df_merge)
#比較方法①,差異在於,如圖,方法②合併出的資料中有重複列。
pd.merge(right,how=‘inner’, on=“None”, left_on=“None”, right_on=“None”, left_index= False, right_index=False )
#參數 | ##說明說明|
---|---|
left | |
#right | |
#。
how
合併方式,可以是left(左合併), right(右合併), outer(外合併), inner(內合併)on
基準列的列名
left_on
左表基準列名
right_on右表基準列列名
left_index左列是否以index為基準,預設False,否#right_index
右列是否以index為基準,預設False,否
其中,left_index與right_index不能與on 同時指定。合併方式left right outer inner
準備資料‘
新準備一組資料:import pandas as pd df1 = pd.DataFrame({'id': ['001', '002', '003'], 'num1': [120, 101, 104], 'num2': [110, 102, 121], 'num3': [105, 120, 113]}) df2 = pd.DataFrame({'id': ['001', '004', '003'], 'num4': [80, 86, 79]}) print(df1) print("=======================================") print(df2) print("=======================================")
inner(預設)
使用來自兩個資料集的鍵的交集
df_merge = pd.merge(df1, df2, on='id') print(df_merge)outer
使用兩個資料集的鍵的並集
df_merge = pd.merge(df1, df2, on='id', how="outer") print(df_merge)
left | 使用來自左資料集的鍵 |
---|---|
使用來自右資料集的鍵 | df_merge = pd.merge(df1, df2, on='id', how='right') print(df_merge) |
2.多對一合併 | |
合併 | df_merge = pd.merge(df1, df2, on='id') print(df_merge) | 合併結果如圖所示:
#仍然按照預設的Inner方式,使用來自兩個資料集的鍵的交集。且重複的鍵的行會在合併結果中體現為多行。 |
import pandas as pd df1 = pd.DataFrame({'id': ['001', '002', '002', '002', '003'], 'num1': [120, 101, 104, 114, 123], 'num2': [110, 102, 121, 113, 126], 'num3': [105, 120, 113, 124, 128]}) df2 = pd.DataFrame({'id': ['001', '001', '002', '003', '001'], 'num4': [80, 86, 79, 88, 93]}) print(df1) print("=======================================") print(df2) print("=======================================")#########
df_merge = pd.merge(df1, df2, on='id') print(df_merge)############concat()#########pd.concat(objs, axis=0, join= ‘outer’, ignore_index:bool=False,keys=None,levels=None,names=None, verify_integrity:bool=False,sort:bool=False,copy:bool=True)######### #########參數######描述###################objs######Series,DataFrame或Panel物件的序列或映射############axis######預設為0,表示列。若為1則表示行。 ############join######預設為"outer",也可以為"inner"############ignore_index######預設為False,表示保留索引(不忽略)。設為True則表示忽略索引。 ############
其他重要参数通过实例说明。
首先准备三组DataFrame数据:
import pandas as pd df1 = pd.DataFrame({'id': ['001', '002', '003'], 'num1': [120, 114, 123], 'num2': [110, 102, 121], 'num3': [113, 124, 128]}) df2 = pd.DataFrame({'id': ['004', '005'], 'num1': [120, 101], 'num2': [113, 126], 'num3': [105, 128]}) df3 = pd.DataFrame({'id': ['007', '008', '009'], 'num1': [120, 101, 125], 'num2': [113, 126, 163], 'num3': [105, 128, 114]}) print(df1) print("=======================================") print(df2) print("=======================================") print(df3)
合并
dfs = [df1, df2, df3] result = pd.concat(dfs) print(result)
如果想要在合并后,标记一下数据都来自于哪张表或者数据的某类别,则也可以给concat加上 参数keys 。
result = pd.concat(dfs, keys=['table1', 'table2', 'table3']) print(result)
此时,添加的keys与原来的index组成元组,共同成为新的index。
print(result.index)
准备两组DataFrame数据:
import pandas as pd df1 = pd.DataFrame({'num1': [120, 114, 123], 'num2': [110, 102, 121], 'num3': [113, 124, 128]}, index=['001', '002', '003']) df2 = pd.DataFrame({'num3': [117, 120, 101, 126], 'num5': [113, 125, 126, 133], 'num6': [105, 130, 128, 128]}, index=['002', '003', '004', '005']) print(df1) print("=======================================") print(df2)
当axis为默认值0时:
result = pd.concat([df1, df2]) print(result)
横向合并需要将axis设置为1 :
result = pd.concat([df1, df2], axis=1) print(result)
对比以上输出差异。
axis=0时,即默认纵向合并时,如果出现重复的行,则会同时体现在结果中
axis=1时,即横向合并时,如果出现重复的列,则会同时体现在结果中。
result = pd.concat([df1, df2], axis=1, join='inner') print(result)
以上是如何使用Python中的DataFrame合併和連接資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!