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

如何合并包含空值的pandas DataFrame两列生成新列?

Pandas合并两列非空值问题解决

报错原因

  • ''.join()仅支持拼接字符串类型元素,你传入的是float类型的数值(包括np.NaN也属于float类型),即使显式转成float类型也无法满足字符串拼接的参数要求,因此触发类型错误。
  • 核心需求是按行提取两列中的非空值,并非拼接两个字段的内容,用字符串拼接的实现思路本身和需求不匹配。

推荐实现方案

方案1:fillna填充(性能最优,适合两列合并场景)

直接用column_2的非空值填充column_1的缺失位置,一行代码即可得到目标列,是大数据量下的首选方案:

import numpy as np
import pandas as pd

df = pd.DataFrame({'ID': [1,2,3,4,5],
                   'column_1': [10.6, 10.4, np.NaN, np.NaN, np.NaN],
                   'column_2': [np.NaN, np.NaN, 30, 40, 50]
                  })

df['new_column'] = df['column_1'].fillna(df['column_2'])
print(df)

运行输出完全匹配预期结果:

ID  column_1  column_2  new_column
0   1      10.6       NaN        10.6
1   2      10.4       NaN        10.4
2   3       NaN      30.0        30.0
3   4       NaN      40.0        40.0
4   5       NaN      50.0        50.0

方案2:combine_first(语义更明确)

该方法是pandas专门为两个Series合并非空值设计的接口,会优先保留调用方Series的非空值,空值位置用传入Series的非空值填充:

df['new_column'] = df['column_1'].combine_first(df['column_2'])

运行结果和方案1完全一致。

方案3:多列合并通用方案

如果后续需要合并3列及以上的非空值,取每行第一个非空值,可以用横向回填后取首列的方式实现,扩展列只需要修改列名列表即可:

# 示例:合并column_1、column_2两列,如需加column_3直接在列表中追加即可
df['new_column'] = df[['column_1', 'column_2']].bfill(axis=1).iloc[:, 0]

内容的提问来源于stack exchange,提问作者valentim.kodak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:18:20