Pandas中str.cat方法为何忽略na_rep参数?
Pandas str.cat中na_rep参数失效的原因及解决方法
问题原因
你提前对包含np.nan的y列执行了astype(str)转换,这会把原本的数值型缺失值np.nan直接转换成字符串字面量'nan'。而str.cat的na_rep参数仅对**Pandas原生识别的缺失值(如未被转换的np.nan、pd.NA)**生效,对已经变成普通字符串的'nan'没有替换作用,所以添加na_rep后输出和未添加时一致。
解决方案
方案1:避免提前转换缺失值列的类型
直接对原始的y列调用str.cat,Pandas会自动处理类型转换,同时识别并替换缺失值:
import pandas as pd import numpy as np df = pd.DataFrame({'x': ['', 'b', 1, 2, 3, 'a'], 'y': [1, 4, 2, np.nan, 4, 7], 'z': [3, 4, 55, 3, 2, 4]}) # 不对y列提前astype(str),直接使用str.cat result = df['y'].str.cat(df['x'].astype(str), sep="_&_", na_rep="MISSING") print(result)
输出结果:
0 1.0_&_ 1 4.0_&_b 2 2.0_&_1 3 MISSING_&_2 4 4.0_&_3 5 7.0_&_a Name: y, dtype: object
方案2:先替换字符串'nan'再拼接
如果必须提前转换类型,可以先把转换后的字符串'nan'替换成目标值:
y_str = df['y'].astype(str).replace('nan', 'MISSING') result = y_str.str.cat(df['x'].astype(str), sep="_&_") print(result)
关于文档示例正常运行的说明
文档中的示例没有提前将缺失值转换为字符串,而是保留了Pandas能识别的缺失值类型,因此na_rep参数可以正常触发替换逻辑。你的Pandas 1.4.4版本本身没有问题,问题出在数据预处理的顺序上。
内容的提问来源于stack exchange,提问作者pauljohn32
相关产品推荐
相关产品推荐

