在Pandas中合并不同长度的DataFrames有多种方式,这里我们将讲解三种常用方式:concat()函数、merge()函数和join()函数。
concat()函数
concat()函数用于沿着某一个轴将多个DataFrame合并为一个。若要按行合并,则使用axis=0;按列合并则使用axis=1。
# 生成3个DataFrame示例
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']},
index=[0, 1, 2, 3])
df2 = pd.DataFrame({'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7']},
index=[4, 5, 6, 7])
df3 = pd.DataFrame({'A': ['A8', 'A9', 'A10', 'A11'],
'B': ['B8', 'B9', 'B10', 'B11'],
'C': ['C8', 'C9', 'C10', 'C11']},
index=[8, 9, 10, 11])
# 按行合并DataFrame
result1 = pd.concat([df1, df2, df3], axis=0)
# 按列合并DataFrame
result2 = pd.concat([df1, df2, df3], axis=1)
结果:
result1:
A B C
0 A0 B0 C0
1 A1 B1 C1
2 A2 B2 C2
3 A3 B3 C3
4 A4 B4 C4
5 A5 B5 C5
6 A6 B6 C6
7 A7 B7 C7
8 A8 B8 C8
9 A9 B9 C9
10 A10 B10 C10
11 A11 B11 C11
result2:
A B C A B C A B C
0 A0 B0 C0 NaN NaN NaN NaN NaN NaN
1 A1 B1 C1 NaN NaN NaN NaN NaN NaN
2 A2 B2 C2 NaN NaN NaN NaN NaN NaN
3 A3 B3 C3 NaN NaN NaN NaN NaN NaN
4 NaN NaN NaN A4 B4 C4 NaN NaN NaN
5 NaN NaN NaN A5 B5 C5 NaN NaN NaN
6 NaN NaN NaN A6 B6 C6 NaN NaN NaN
7 NaN NaN NaN A7 B7 C7 NaN NaN NaN
8 NaN NaN NaN NaN NaN NaN A8 B8 C8
9 NaN NaN NaN NaN NaN NaN A9 B9 C9
10 NaN NaN NaN NaN NaN NaN A10 B10 C10
11 NaN NaN NaN NaN NaN NaN A11 B11 C11
上面结果中,result1是按行合并的DataFrame,result2按列合并的DataFrame。在按列合并时,需要特别注意DataFrame中的索引值,这可能会影响查询结果。这是因为,利用concat()函数按列合并DataFrame时,会将各个DataFrame中行索引相同的部分合并到一起,而将行索引不同的部分保留下来。因此,如果DataFrame中含有相同的行索引,最好先处理掉。
merge()函数
merge()函数用于按照一些规则将两个DataFrame中的行合并到一起。
# 生成示例DataFrame
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2'],
'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']})
# 按照key列合并DataFrame
result = pd.merge(df1, df2, on='key')
结果:
result:
key A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 C2 D2
上面结果中,DataFrame df1和df2中的行按照key列的值进行合并。merge()函数还支持更复杂的合并方式,比如当需要合并的列不具有相同的名字时,merge()函数可以使用left_on 和right_on参数。
join()函数
join()函数实际上是对merge()函数的一种简化方式,用于根据某个DataFrame的索引来拼接两个DataFrame。它只能按照行合并DataFrame,而且只能按索引合并。join()函数中使用的参数也和merge()函数略有不同。
# 生成示例DataFrame
left = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']},
index=['K0', 'K1', 'K2'])
right = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']},
index=['K0', 'K2', 'K3'])
# 按索引合并DataFrame
result = left.join(right)
结果:
result:
A B C D
K0 A0 B0 C0 D0
K1 A1 B1 NaN NaN
K2 A2 B2 C1 D1
K3 NaN NaN C2 D2
上面的结果中,只保留了在两个DataFrame中都存在的索引值(K0和K2),而K1和K3则只在相应的DataFrame中出现。在合并DataFrame时,也需要留意索引值是否有重复,这可能会影响合并结果。
总之,Pandas提供了多种合并DataFrame的方式,具体使用哪种方式还要根据数据的具体情况来决定。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何在Pandas中合并不同长度的DataFrames - Python技术站