Pandas的瘋狂融合之路
大家好,我是派森醬。
文章內(nèi)容只是用部分代碼來(lái)介紹功能的用法和最后的結(jié)果顯示,不是真的用幾個(gè)G的文件來(lái)展示,也展示不過來(lái)的。
熟悉了功能怎么用,就可以用自己的數(shù)據(jù)來(lái)操作了。
merge?可以匹配兩表的內(nèi)容,但是merge?只能連接兩個(gè)表,不能多表連接,這次說說能用于多表連接的功能concat。
還是用上次的數(shù)據(jù),這次多加了一個(gè)DataFrame,用于顯示結(jié)果。
初始化數(shù)據(jù)
python
import pandas as pd
df1 = pd.DataFrame({
'姓名': ['張三', '李四', '王五', '劉六', '齊四'],
'號(hào)碼': ['123', '456', '789', '987', '654']
})
df2 = pd.DataFrame({
'姓名': ['張三', '張三', '張三', '李四', '李四', '李四', '李四', '王五', '王五', '劉玉', '胡軍', '劉玉', '劉六', '劉六', '劉六', '劉六', '劉克', '劉玉', '齊七', '齊七', '齊七', '齊七', '馮亮', '劉玉', '王云'],
'號(hào)碼': ['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({
'姓名': ['張三', '李四', '王五', '劉六', '齊四'],
'號(hào)碼': ['123', '456', '789', '987', '654'],
'年齡': ['25', '36', '41', '12', '54']
})
用法
說明
concat?是一個(gè)軸向連接的功能,可以沿著一條軸將多個(gè)表對(duì)象堆疊到一起:how?的模式是outer
axis=0?是上下拼接,列重復(fù)的會(huì)自動(dòng)合并,axis=1是左右拼接,行或索引重復(fù)的會(huì)自動(dòng)合并
上下拼接
先連接兩個(gè)表:
df = pd.concat([df1, df2], axis=0)
輸出:
兩個(gè)表的重復(fù)列名自動(dòng)合并了,缺失的值為NaN
連接三個(gè)表:
df = pd.concat([df1, df2, df3], axis=0)
輸出:
同時(shí)增加了另一個(gè)表的內(nèi)容和增加了一列,缺失值同樣為NaN
左右拼接
直接拼接三個(gè)表:
df = pd.concat([df1, df2, df3], axis=1)
輸出:
這次是在右邊拼接的,行是按內(nèi)容行最多的來(lái)算,其它的內(nèi)容為空,列一直在增加,是把三個(gè)表的列都拼接上了。
總結(jié)
merge和concat?的表連接,都有各自的特點(diǎn),我們需要按自己所需要的結(jié)果去用,想匹配內(nèi)容的,就用merge?,想全部連接到一起的,就用concat。