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

Python中合并不同行数的Pandas DataFrame,避免出现NaN值

解决方法

针对你的需求,有几种简单直接的方式可以实现:

方法1:合并后用向前填充(ffill)补全NaN

这是最快捷的方式,适合你的场景——短DataFrame只有单个值,合并后直接将NaN填充为已有值:

import pandas as pd

# 构造示例数据
df1 = pd.DataFrame({'col1': [1]})
df2 = pd.DataFrame({'col2': [5]})
df3 = pd.DataFrame({'col3': [7, 8, 9]})

# 先合并
combined = pd.concat([df1, df2, df3], axis=1)
# 向前填充NaN
result = combined.ffill()

运行后result就是你要的预期结果,ffill()会把每列的非NaN值向下填充,覆盖所有NaN位置。

方法2:直接给长DataFrame添加固定列

如果确定短DataFrame只有单个值,可以直接提取这个值,给行数最多的DataFrame(这里是df3)新增列:

import pandas as pd

df1 = pd.DataFrame({'col1': [1]})
df2 = pd.DataFrame({'col2': [5]})
df3 = pd.DataFrame({'col3': [7, 8, 9]})

# 直接添加列,值为对应DataFrame的唯一值
result = df3.assign(col1=df1['col1'].iloc[0], col2=df2['col2'].iloc[0])
# 调整列顺序匹配预期(可选)
result = result[['col1', 'col2', 'col3']]

这种方法效率更高,不需要处理合并后的NaN,直接构造目标DataFrame。

方法3:重复短DataFrame的行再合并

如果短DataFrame有多个值,需要将这些值重复到与最长DataFrame行数一致,再合并:

import pandas as pd

df1 = pd.DataFrame({'col1': [1]})
df2 = pd.DataFrame({'col2': [5]})
df3 = pd.DataFrame({'col3': [7, 8, 9]})

# 获取最大行数
max_rows = max(len(df1), len(df2), len(df3))

# 重复短DataFrame的行并重置索引
df1_repeated = df1.loc[df1.index.repeat(max_rows)].reset_index(drop=True)
df2_repeated = df2.loc[df2.index.repeat(max_rows)].reset_index(drop=True)

# 合并所有DataFrame
result = pd.concat([df1_repeated, df2_repeated, df3], axis=1)

这种方法更通用,即使短DataFrame有多行数据,也能按原行顺序重复填充到目标行数。

内容的提问来源于stack exchange,提问作者Jesús Roldán Cadena

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 02:21:17