如何正确合并/拼接列数不同的两个DataFrame?
解决列数不同的DataFrame拼接问题
首先要明确:你需要的是把两个表格上下堆叠(纵向合并),而不是按列匹配的横向合并,所以pd.merge不适用——它是用来做类似数据库的关联匹配,不是堆叠操作。
正确的纵向堆叠方法
使用pd.concat时,加上ignore_index=True参数重置索引,就能得到符合预期的结果:
import pandas as pd # 你的原始数据 a = [100, 66, 80] b = [26, 53, 45] c = [94, 100, 32] df1 = pd.DataFrame([a,b,c], columns = ['A', 'C', 'D']) a = [88, 94, 21, 39] b = [82, 79, 19, 87] c = [20, 10, 92, 13] df2 = pd.DataFrame([a,b,c], columns = ['A', 'B', 'C', 'D']) # 正确的拼接代码 result = pd.concat([df1, df2], join='outer', ignore_index=True) print(result)
最终输出结果
A B C D 0 100 NaN 26 94 1 66 NaN 53 100 2 80 NaN 45 32 3 88 82.0 20 10 4 94 79.0 19 92 5 21 19.0 87 13 6 39 87.0 13 NaN
为什么之前的尝试不符合预期?
- 你之前用
pd.concat([df1, df2], join='outer')时,没加ignore_index=True,结果会保留原数据的索引(df1索引是0、1、2,df2索引也是0、1、2、3),导致索引重复,看起来像没拼接对,但其实数据是正确的,只是索引格式有问题。 pd.merge是按共同列(比如A、C、D)做值匹配,会把两个表格中列值相同的行合并到一行,这和你要的“上下堆叠”是完全不同的操作,所以结果自然不对。
内容的提问来源于stack exchange,提问作者user23477807
相关产品推荐
相关产品推荐

