如何解决Pandas字符串类型列中NaN值无法替换的问题?
问题解决:字符串列NaN无法被fillna替换的处理方案
问题原因
你执行dat['aa'].astype('str')时,原列中的np.nan会被强制转换为字符串'nan',而非保留缺失值(NaN)状态。此时fillna('')仅针对真正的NaN值生效,自然无法替换这个字符串形式的'nan'。
解决办法
方案1:先填充缺失值再转换类型
优先对aa列的NaN填充空字符串,再转换为字符串类型,避免NaN被转成'nan':import pandas as pd import numpy as np dat = pd.DataFrame({'aa' : [np.nan, 'A'], 'bb' : [123, np.nan]}) # 先填充aa列缺失值,再转字符串类型 dat['aa'] = dat['aa'].fillna('').astype('str') # 处理bb列的缺失值 dat['bb'] = dat['bb'].fillna('')方案2:替换已生成的'nan'字符串
如果已经完成了astype('str')转换,直接替换字符串'nan'为空即可:# 替换aa列的'nan'字符串 dat['aa'] = dat['aa'].replace('nan', '') # 统一处理其他列的NaN dat.fillna('', inplace=True)方案3:使用pandas专属StringDtype(推荐)
pandas 1.0及以上版本支持StringDtype,它会将缺失值保留为NaN而非转成字符串'nan',配合fillna可以直接生效:dat['aa'] = dat['aa'].astype('string') # 注意是'string'而非'str' dat.fillna('', inplace=True)
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

