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
相关产品推荐
相关产品推荐

