You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拼接列名与长度均不同的多个DataFrame实现按行堆叠

你用pd.concat([df1, df2], axis=0)出现列并排的原因是该方法默认按列名对齐拼接,两个DataFrame列名不一致时会自动扩充总列数,对应DataFrame缺失的列填充NaN,就会出现你看到的效果。以下是两种符合不同需求的解决方案:

方案1:所有值堆叠为单列(无原有行列结构)

如果只需要把所有DataFrame的全部值按顺序上下堆叠成只有1列的结果,直接将每个DataFrame的值拉直后再拼接即可:

import pandas as pd

# 所有待拼接的DataFrame放入列表
df_list = [df1, df2, df3]

# 逐个处理为单列DataFrame后拼接
result = pd.concat(
    [pd.DataFrame(df.values.reshape(-1, 1)) for df in df_list],
    axis=0,
    ignore_index=True
)

# 可自定义最终列名
result.columns = ['all_values']

方案2:保留原有行结构堆叠,重置列名

如果需要保留每个DataFrame原本的行结构(即原df1的每行3个值、df2的每行4个值的结构不变),仅做行的上下堆叠,不需要原列名,可以先把所有df的列名统一重置为数字索引后再拼接:

import pandas as pd

df_list = [df1, df2, df3]
processed_dfs = []

for df in df_list:
    tmp_df = df.copy()
    # 将列名重置为0、1、2...和当前df列数对应
    tmp_df.columns = range(tmp_df.shape[1])
    processed_dfs.append(tmp_df)

# 拼接后自动按最大列数补全NaN,ignore_index重置行索引
result = pd.concat(processed_dfs, axis=0, ignore_index=True)

你可以根据自己的实际需求选择对应方案。


内容的提问来源于stack exchange,提问作者Anirban Nag 'tintinmj'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:45:01