如何解决Pandas读取CSV时DataFrame空值被识别为空白的问题
问题描述
有如下格式的CSV文件(字段分隔符为|):
A B C D E F "1"|"6A-7A"|"MFF" || "KEY" |"Y" "2"|"n/a" | "" |"n/a" | "INVENTORY"|"Y"
其中第一行数据的D列单元格值为null。使用以下代码读取文件:
df = pd.read_csv('test.csv', keep_default_na=False, skip_blank_lines=True)
读取后该null值显示为空白,期望该位置显示为NaN,该如何实现?
解决方案
调整pd.read_csv的参数配置即可实现,核心是明确分隔符并指定要识别为NaN的字符串:
- 必须指定分隔符为
|,否则Pandas会用默认的逗号解析,导致读取逻辑错误 - 通过
na_values参数将空白字符串(以及你CSV里的n/a)映射为NaN - 开启
skipinitialspace忽略字段前后的空格,避免数据带多余空格
修改后的代码如下:
import pandas as pd df = pd.read_csv( 'test.csv', sep='|', skipinitialspace=True, na_values=['', 'n/a'], keep_default_na=False )
参数说明
sep='|':明确字段分隔符为竖线,这是解决问题的基础skipinitialspace=True:自动去除每个字段开头的空格,比如E列的"INVENTORY"会被处理为INVENTORYna_values=['', 'n/a']:指定空白字符串和n/a都被识别为NaN,覆盖你CSV里的两种空值场景keep_default_na=False:关闭Pandas默认的NA识别规则,只使用我们自定义的映射,避免冲突
运行上述代码后,第一行D列的空白会被转换成NaN,第二行C列的空字符串、D列的n/a也会被识别为NaN,完全符合需求。
内容的提问来源于stack exchange,提问作者gseph
相关产品推荐
相关产品推荐

