There are three main ways to combine dataFrames i.e., merging, joining and concatenating. The following examples will illustrate merging, joining and concatenation.
组合dataFrames的主要方法有三种,即合并,联接和串联 。 以下示例将说明合并,联接和串联。
Create three 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])
# printing
print(df1)
print(df2)
print(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
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
级联 (Concatenation)
Concatenation glues/combines the dataFrames. Please note that the dimensions should match along the axis we are concatenating on.
串联粘贴/合并dataFrames。 请注意,尺寸应沿着我们串联的轴匹配。
Use pd.concat and pass in a list of dataFrames to concatenate together.
使用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
'''
# specify axis=1,
# if you want to join and merge along the concatenate
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
'''
In the above example, we see a bunch of missing values and that is because these data frames didn’t have values for all the indices we wanted to concatenate on. While working on concatenation and ensure that all the values are lined up correctly when joining on-axis.
在上面的示例中,我们看到了一堆丢失的值,这是因为这些数据框没有要连接的所有索引的值。 在进行串联时,请确保在同轴连接时所有值都正确对齐。
合并中 (Merging)
Let's create some more example dataFrames,
让我们创建更多示例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']
})
# printing
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
'''
The merge function allows merging the dataFrames using similar logic as merging SQL tables. For instance,
合并功能允许使用与合并SQL表类似的逻辑来合并dataFrame。 例如,
# default merge on 'inner'
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
'''
A little more complicated example dataFrames can be,
稍微复杂一点的示例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']
})
# pass a single column 'key' or list of columns
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
'''
# merge outer (similar to outer join)
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
'''
# merge right (similar to right join)
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
'''
# merge left (similar to left join)
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
'''
加盟 (Joining)
Joining is a convenient method for combining the columns of two potentially differently-indexed DataFrames into a single result DataFrame. Joining is very similar to merge except they are joining on the index instead of a column.
联接是一种方便的方法,用于将两个可能具有不同索引的DataFrame的列组合为单个结果DataFrame。 联接与合并非常相似,只不过它们是在索引而不是列上联接。
Create example dataFrames,
创建示例数据框,
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
'''
翻译自: https://www.includehelp.com/python/python-pandas-merging-joining-and-concatenating.aspx