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

Pandas中NaN是否干扰列拼接?如何处理含字符串与NaN的列拼接

解决两列含NaN/空字符串的拼接问题

嘿,我来帮你搞定这个拼接难题!咱们要实现的核心逻辑很明确:只要其中一列有有效内容(非NaN、非空字符串),就保留/拼接这些内容;只有当两列全是NaN或空字符串时,才返回NaN。下面给你两种简单好用的实现方式:

方法一:fillna+replace组合(最简洁高效)

先把NaN替换成空字符串,这样相加时不会被NaN干扰,之后再把空结果转回NaN,完美匹配你的需求:

import pandas as pd
import numpy as np

# 先模拟你的测试数据
df = pd.DataFrame({
    'col0': ['X', 'Y', 'Z', 'W'],
    'col1': ['A', np.nan, np.nan, ''],
    'col2': [np.nan, 'B', np.nan, 'B']
})

# 第一步:将NaN转为空字符串后相加,避免NaN打断拼接
df['col3'] = df['col1'].fillna('') + df['col2'].fillna('')
# 第二步:把两列都为空的结果转回NaN
df['col3'] = df['col3'].replace('', np.nan)

运行后就能得到你想要的结果:

col0col1col2col3
XANaNA
YNaNBB
ZNaNNaNNaN
W''BB

方法二:apply自定义逻辑(更灵活)

如果之后需要扩展拼接规则(比如加分隔符、过滤特定内容),可以用apply逐行处理,逻辑更直观:

df['col3'] = df[['col1', 'col2']].apply(
    lambda row: ''.join([val for val in row if pd.notna(val) and val != '']),
    axis=1
)
df['col3'] = df['col3'].replace('', np.nan)

这个方法会逐行检查每列的值,只保留非NaN且非空的内容再拼接,最后同样把空结果转成NaN,效果和方法一完全一致。

小补充

如果需要在两列都有内容时加分隔符(比如把A和B拼成"A|B"),只要把方法一里的空字符串改成你想要的分隔符就行,比如:

df['col3'] = df['col1'].fillna('') + '|' + df['col2'].fillna('')

之后再按同样的方法把空结果转回NaN即可。

内容的提问来源于stack exchange,提问作者Violatic

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:14:11