列未对齐时合并多个pandas DataFrame的问题
解决DataFrame纵向合并的问题
嘿,我来帮你搞定这个DataFrame合并的事儿!
首先得说清楚你之前遇到的问题为啥没得到预期结果:
- 当你设置
axis=1时,pd.concat是横向拼接,会按索引把三个DataFrame的列并排在一起,结果肯定不是你要的纵向堆叠效果; - 用默认的
axis=0(纵向拼接)时,其实逻辑是对的,但大概率是没加ignore_index=True参数,导致合并后的索引重复(比如df1、df2的索引都是0、1,df3的索引是0,合并后索引会是0、1、0、1、0),可能你误以为结果不符合预期。
正确的合并代码
先确认你的三个DataFrame定义是正确的(比如df3是一行数据):
import pandas as pd # 定义你的三个DataFrame df1 = pd.DataFrame({'A': [1, 2], 'B': [1, 2], 'C': [1, 2]}) df2 = pd.DataFrame({'A': [3, 4], 'B': [3, 4], 'C': [3, 4]}) df3 = pd.DataFrame({'A': [5], 'B': [5]})
然后用带ignore_index=True的pd.concat就能得到你要的结果:
combined_df = pd.concat([df1, df2, df3], ignore_index=True)
运行后得到的结果完全符合你的预期:
A B C 0 1 1 1.0 1 2 2 2.0 2 3 3 3.0 3 4 4 4.0 4 5 5 NaN
原理说明
pd.concat默认axis=0,会按行纵向堆叠DataFrame;- 当拼接的DataFrame列数不一致时,缺失的列会自动填充
NaN,正好匹配你df3缺少C列的需求; ignore_index=True会重置合并后的索引,让它从0开始连续编号,避免原索引重复的问题。
内容的提问来源于stack exchange,提问作者mommomonthewind
相关产品推荐
相关产品推荐

