Pandas的瘋狂融合之路
大家好,我是派森醬。
文章內容只是用部分代碼來介紹功能的用法和最后的結果顯示,不是真的用幾個G的文件來展示,也展示不過來的。
熟悉了功能怎么用,就可以用自己的數據來操作了。
merge?可以匹配兩表的內容,但是merge?只能連接兩個表,不能多表連接,這次說說能用于多表連接的功能concat。
還是用上次的數據,這次多加了一個DataFrame,用于顯示結果。
初始化數據
python
import pandas as pd
df1 = pd.DataFrame({
'姓名': ['張三', '李四', '王五', '劉六', '齊四'],
'號碼': ['123', '456', '789', '987', '654']
})
df2 = pd.DataFrame({
'姓名': ['張三', '張三', '張三', '李四', '李四', '李四', '李四', '王五', '王五', '劉玉', '胡軍', '劉玉', '劉六', '劉六', '劉六', '劉六', '劉克', '劉玉', '齊七', '齊七', '齊七', '齊七', '馮亮', '劉玉', '王云'],
'號碼': ['123', '456', '789', '123', '123', '456', '456', '456', '456', '456', '741', '741', '741', '741', '741', '789', '789', '789', '789', '789', '852', '852', '852', '852', '852'],
'日期': ['2022-03-13', '2022-03-06', '2022-01-30', '2022-01-04', '2022-02-26', '2022-03-26', '2022-03-06', '2022-01-30', '2022-01-29', '2022-03-13', '2022-03-06', '2022-02-19', '2022-02-04', '2022-03-10', '2022-04-19', '2022-03-10', '2022-01-29', '2022-02-19', '2022-03-06', '2022-03-26', '2022-01-04', '2022-02-04', '2022-04-19', '2022-02-26', '2022-03-06'],
'方案': ['G1012', 'G1022', 'G1002', 'G1007', 'G1017', 'G1023', 'G1018', 'G1003', 'G1008', 'G1013', 'G1020', 'G1015', 'G1010', 'G1005', 'G1025', 'G1004', 'G1009', 'G1014', 'G1019', 'G1024', 'G1006', 'G1011', 'G1026', 'G1016', 'G1021']
})
df3 = pd.DataFrame({
'姓名': ['張三', '李四', '王五', '劉六', '齊四'],
'號碼': ['123', '456', '789', '987', '654'],
'年齡': ['25', '36', '41', '12', '54']
})
用法
說明
concat?是一個軸向連接的功能,可以沿著一條軸將多個表對象堆疊到一起:how?的模式是outer
axis=0?是上下拼接,列重復的會自動合并,axis=1是左右拼接,行或索引重復的會自動合并
上下拼接
先連接兩個表:
df = pd.concat([df1, df2], axis=0)
輸出:
兩個表的重復列名自動合并了,缺失的值為NaN
連接三個表:
df = pd.concat([df1, df2, df3], axis=0)
輸出:
同時增加了另一個表的內容和增加了一列,缺失值同樣為NaN
左右拼接
直接拼接三個表:
df = pd.concat([df1, df2, df3], axis=1)
輸出:
這次是在右邊拼接的,行是按內容行最多的來算,其它的內容為空,列一直在增加,是把三個表的列都拼接上了。
總結
merge和concat?的表連接,都有各自的特點,我們需要按自己所需要的結果去用,想匹配內容的,就用merge?,想全部連接到一起的,就用concat。