如何使pandas.read_csv区分CSV中的NULL值与空单元格?
区分CSV中的空单元格与"NULL"字符串
这个问题太常见了——pandas默认会把CSV里的空单元格和写为"NULL"的文本一股脑转成NaN,直接抹平了二者的区别。要解决这个问题,核心就是在读取CSV时就修改默认的空值识别规则,让空单元格和"NULL"字符串各自保留原始状态。
步骤1:正确读取CSV文件
读取时我们要做两件事:禁用pandas默认的空值映射逻辑,同时不指定任何额外的空值标记。这样空单元格会保持为空字符串'',而"NULL"会被完整保留为字符串'NULL'。
用这段代码读取你的文件:
import pandas as pd # 关闭默认空值识别,且不添加额外的空值转换规则 df = pd.read_csv('你的文件路径.csv', keep_default_na=False, na_values=[])
读取完成后,你的DataFrame里Col2列的内容会和原始CSV完全对应:空单元格是空字符串'',写着"NULL"的单元格是字符串'NULL',二者彻底区分开。
步骤2:针对两种值分别处理
现在你可以随心所欲地操作这两种不同的内容了:
- 查看唯一值:
df['Col2'].unique()会返回array(['NULL', 'Virgo', 'Arkenea', ''], dtype=object),清晰展示所有原始值 - 替换空单元格:
df['Col2'] = df['Col2'].replace('', 'EMPTY_CELL') - 替换"NULL"文本:
df['Col2'] = df['Col2'].replace('NULL', 'EXPLICIT_NULL') - 如果只想把"NULL"标记为缺失值(空单元格保留原样),可以用更适合字符串列的缺失值标记:
df['Col2'] = df['Col2'].replace('NULL', pd.NA)
为什么默认会混淆?
pandas默认的na_values参数包含了空字符串、"NULL"、"NaN"、"N/A"等十几种值,读取时会自动把这些内容统一转成NaN,自然就没法区分原始的空单元格和"NULL"文本了。通过设置keep_default_na=False+na_values=[],我们完全关闭了这种自动转换,让CSV的原始内容完整保留下来。
内容的提问来源于stack exchange,提问作者RSM
相关产品推荐
相关产品推荐

