尝试垂直合并两个Pandas DataFrame未正常生效,求解决方法
Pandas垂直合并DataFrame出现大量NaN的解决方法
你的问题出在两个DataFrame的列名完全不匹配,Pandas的pd.concat()默认会按列名对齐数据,所以合并后各自的列只会在自身数据行有值,其余行自动填充NaN。
根据你的需求,分两种情况处理:
情况1:两个DataFrame的列数据是一一对应的
如果df2的clx/cly/clz分别对应df1的cl1/cl2/cl3,先重命名df2的列名,再执行垂直合并:
import pandas as pd df1=pd.DataFrame() df2=pd.DataFrame() df1['cl1']=[1,2,3,4,5,3] df1['cl2']=[2,3,4,5,6,3] df1['cl3']=[5,4,3,2,1,4] df2['clx']=[11,2,3,4,5] df2['cly']=[22,3,4,5,6] df2['clz']=[55,4,3,2,1] df2['cla']=[66,4,3,2,1] # 重命名df2的列,和df1对应列匹配(按需调整对应关系) df2 = df2.rename(columns={'clx': 'cl1', 'cly': 'cl2', 'clz': 'cl3'}) # 垂直合并,ignore_index重置行索引 merged_df = pd.concat([df1, df2], ignore_index=True) print(merged_df)
执行后结果会把df2的对应列数据直接追加到df1下方,非对应列(比如cla)会保留,df1的该行cla值为NaN。
情况2:只是单纯堆叠行,不考虑列名对应
如果不需要列名对齐,只想把df2的所有行直接加到df1后面,保留所有列,那你当前的结果其实就是正确的堆叠效果。但如果这不是你想要的,说明你需要先统一列名再合并。
另外,如果你不需要df2的额外列(比如cla),可以先删除再合并:
df2 = df2.drop(columns=['cla']) # 重命名后合并 df2.columns = ['cl1', 'cl2', 'cl3'] merged_df = pd.concat([df1, df2], ignore_index=True)
内容的提问来源于stack exchange,提问作者Abhishek Sasidharan
相关产品推荐
相关产品推荐

