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

pandas合并含nan值的字符串列时的异常行为原因及解决方法

问题原因
  • 使用astype('string')转换得到的是pandas专属的可空字符串类型,列中的空值会被处理为pd.NA
  • 该类型遵循空值传播规则:只要运算项中存在pd.NA,运算结果就会直接返回pd.NA,因此只要A、B任意一列存在空值,拼接结果就会显示为<NA>
  • 你避开astype(str)的考量是正确的,该方法会把np.nan直接转换为字面量字符串'nan',不符合业务需求
解决方法

推荐使用pandas内置的str.cat()字符串拼接方法,该方法支持通过na_rep参数自定义空值的替换内容,将空值替换为空字符串即可得到预期结果:

import numpy as np
import pandas as pd
data = pd.DataFrame({'A':['Peter','Karl'], 'B':[np.nan,'Jackson']})

# 转换为可空字符串类型后拼接,空值替换为空字符串,分隔符指定为逗号
data['AddCols'] = data['A'].astype('string').str.cat(data['B'].astype('string'), sep=',', na_rep='')

也可以先对每列单独做空值填充后,再用加号直接拼接:

data['AddCols'] = data['A'].astype('string').fillna('') + ',' + data['B'].astype('string').fillna('')

两种方案运行后得到的结果一致,均符合预期:

|    | AddCols      |
|---:|:-------------|
|  0 | Peter,       |
|  1 | Karl,Jackson |

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 22:54:07