pandas的read_csv何时会将空白值读取为字符串'nan'?
Pandas读取CSV后字符串'nan'无法被fillna识别的问题解决
问题现象
使用如下代码读取CSV文件:
ab = pd.read_csv(os.path.join(data_dir, f'{prefix}_ab.csv'), dtype={'name': str}, low_memory=False)
运行后发现原本经文本编辑器确认的空白值被加载为字符串类型的'nan',导致基于np.nan的替换操作和.fillna('')均无法生效。
根因定位
最初误以为是read_csv的读取逻辑存在问题,后续排查确认:pandas实际上已正确将空白值识别为NaN,问题出在后续的数据处理函数:
set_as_null = [None, 'NOT APPLICABLE', np.nan] df['column1'] = df['column1'].map(lambda x: '' if x in set_as_null else '_'.join(str(x).lower().split()))
核心原因:pandas和Numpy中存在np.nan != np.nan的特性,NaN值无法命中set_as_null的包含判断,执行str(x)时会将NaN强制转为字符串'nan',最终得到字符串类型的空值标识而非真实空值。
解决方案
在pd.read_csv中指定na_values参数处理'NOT APPLICABLE'这类自定义空值,再配合df.fillna('')即可完全解决问题。
内容的提问来源于stack exchange,提问作者Janek Ziobro
相关产品推荐
相关产品推荐

