组合dataFrames的主要方法有三种,即合并,联接和串联。以下示例将说明合并,连接和串联。
创建三个数据框
import pandas as pd df1 = pd.DataFrame({ 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3'], }, index=[0, 1, 2, 3]) df2 = pd.DataFrame({ 'A': ['A4', 'A5', 'A6', 'A7'], 'B': ['B4', 'B5', 'B6', 'B7'], 'C': ['C4', 'C5', 'C6', 'C7'], 'D': ['D4', 'D5', 'D6', 'D7'], }, index=[4, 5, 6, 7]) df3 = pd.DataFrame({ 'A': ['A8', 'A9', 'A10', 'A11'], 'B': ['B8', 'B9', 'B10', 'B11'], 'C': ['C8', 'C9', 'C10', 'C11'], 'D': ['D8', 'D9', 'D10', 'D11'], }, index=[8, 9, 10, 11]) # 印刷 print(df1) print(df2) print(df3)
输出结果
A B C D 0 A0 B0 C0 D0 1 A1 B1 C1 D1 2 A2 B2 C2 D2 3 A3 B3 C3 D3 A B C D 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D7 A B C D 8 A8 B8 C8 D8 9 A9 B9 C9 D9 10 A10 B10 C10 D10 11 A11 B11 C11 D11
串联粘贴/合并dataFrames。请注意,尺寸应沿着我们串联的轴匹配。
使用pd.concat并传入dataFrames列表以连接在一起。
print(pd.concat([df1,df2,df3])) ''' Output: A B C D 0 A0 B0 C0 D0 1 A1 B1 C1 D1 2 A2 B2 C2 D2 3 A3 B3 C3 D3 4 A4 B4 C4 D4 5 A5 B5 C5 D5 6 A6 B6 C6 D6 7 A7 B7 C7 D7 8 A8 B8 C8 D8 9 A9 B9 C9 D9 10 A10 B10 C10 D10 11 A11 B11 C11 D11 '''
# 指定轴= 1, # 如果您想沿着串联连接并合并 print(pd.concat([df1,df2,df3], axis = 1)) ''' Output: A B C D A B C D A B C D 0 A0 B0 C0 D0 NaN NaN NaN NaN NaN NaN NaN NaN 1 A1 B1 C1 D1 NaN NaN NaN NaN NaN NaN NaN NaN 2 A2 B2 C2 D2 NaN NaN NaN NaN NaN NaN NaN NaN 3 A3 B3 C3 D3 NaN NaN NaN NaN NaN NaN NaN NaN 4 NaN NaN NaN NaN A4 B4 C4 D4 NaN NaN NaN NaN 5 NaN NaN NaN NaN A5 B5 C5 D5 NaN NaN NaN NaN 6 NaN NaN NaN NaN A6 B6 C6 D6 NaN NaN NaN NaN 7 NaN NaN NaN NaN A7 B7 C7 D7 NaN NaN NaN NaN 8 NaN NaN NaN NaN NaN NaN NaN NaN A8 B8 C8 D8 9 NaN NaN NaN NaN NaN NaN NaN NaN A9 B9 C9 D9 10 NaN NaN NaN NaN NaN NaN NaN NaN A10 B10 C10 D10 11 NaN NaN NaN NaN NaN NaN NaN NaN A11 B11 C11 D11 '''
在上面的示例中,我们看到了一堆丢失的值,这是因为这些数据框没有要连接的所有索引的值。在进行串联时,请确保在同轴连接时所有值都正确对齐。
让我们创建更多示例dataFrames,
left = pd.DataFrame({ 'key': ['K0', 'K1', 'K2', 'K3'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'] }) right = pd.DataFrame({ 'key': ['K0', 'K1', 'K2', 'K3'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3'] }) # 印刷 print(left) print(right) ''' Output: key A B 0 K0 A0 B0 1 K1 A1 B1 2 K2 A2 B2 3 K3 A3 B3 key C D 0 K0 C0 D0 1 K1 C1 D1 2 K2 C2 D2 3 K3 C3 D3 '''
合并功能允许使用与合并SQL表类似的逻辑来合并dataFrame。例如,
# 默认合并在“内部” print(pd.merge(left,right,how='inner',on='key')) ''' Output: key A B C D 0 K0 A0 B0 C0 D0 1 K1 A1 B1 C1 D1 2 K2 A2 B2 C2 D2 3 K3 A3 B3 C3 D3 '''
稍微复杂一点的示例dataFrames可以是,
left = pd.DataFrame({ 'key1': ['K0', 'K0', 'K1', 'K2'], 'key2': ['K0', 'K1', 'K0', 'K1'], 'A': ['A0', 'A1', 'A2', 'A3'], 'B': ['B0', 'B1', 'B2', 'B3'] }) right = pd.DataFrame({ 'key1': ['K0', 'K1', 'K1', 'K2'], 'key2': ['K0', 'K0', 'K0', 'K0'], 'C': ['C0', 'C1', 'C2', 'C3'], 'D': ['D0', 'D1', 'D2', 'D3'] }) # 传递单个列“键”或列列表 print(pd.merge(left, right, on=['key1', 'key2'])) ''' key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K1 K0 A2 B2 C1 D1 2 K1 K0 A2 B2 C2 D2 ''' # 合并外部(类似于外部联接) print(pd.merge(left, right, how='outer', on=['key1', 'key2'])) ''' key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K0 K1 A1 B1 NaN NaN 2 K1 K0 A2 B2 C1 D1 3 K1 K0 A2 B2 C2 D2 4 K2 K1 A3 B3 NaN NaN 5 K2 K0 NaN NaN C3 D3 ''' # 合并权利(类似于权利加入) print(pd.merge(left, right, how='right', on=['key1', 'key2'])) ''' key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K1 K0 A2 B2 C1 D1 2 K1 K0 A2 B2 C2 D2 3 K2 K0 NaN NaN C3 D3 ''' # 左合并(类似于左联接) print(pd.merge(left, right, how='left', on=['key1', 'key2'])) ''' key1 key2 A B C D 0 K0 K0 A0 B0 C0 D0 1 K0 K1 A1 B1 NaN NaN 2 K1 K0 A2 B2 C1 D1 3 K1 K0 A2 B2 C2 D2 4 K2 K1 A3 B3 NaN NaN '''
联接是一种方便的方法,用于将两个可能具有不同索引的DataFrame的列组合到单个结果DataFrame中。联接与合并非常相似,只不过它们是在索引而不是列上联接。
创建示例数据框,
left = pd.DataFrame({ 'A': ['A0', 'A1', 'A2'], 'B': ['B0', 'B1', 'B2'] }, index = ['K0', 'K1', 'K2']) right = pd.DataFrame({ 'C': ['C0', 'C2', 'C3'], 'D': ['D0', 'D2', 'D3'] }, index = ['K0', 'K2', 'K3']) print(left.join(right)) ''' A B C D K0 A0 B0 C0 D0 K1 A1 B1 NaN NaN K2 A2 B2 C2 D2 ''' print(left.join(right, how='outer')) ''' A B C D K0 A0 B0 C0 D0 K1 A1 B1 NaN NaN K2 A2 B2 C2 D2 K3 NaN NaN C3 D3 '''