You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pandas read_csv区分加载CSV中的缺失列值与带引号空字符串

如何使用Pandas read_csv区分加载CSV中的缺失列值与带引号空字符串

嘿,这个场景我之前处理过,确实Pandas默认的读取逻辑会把CSV里的两种空值混为一谈——不带引号的缺失字段(也就是,,这种)和带引号的空字符串(""),默认都会被转成NaN,但咱们可以通过调整读取参数轻松区分它们,实现你要的效果:把前者保留为NaN,后者保留为空字符串''。

先明确下你的CSV内容大概是这样的对吧?

id,name,age
1,,"25"
2,"",3
3,John,

接下来直接上解决方案,核心是借助Python标准库csv的引号控制参数,结合Pandas的read_csv来实现精准识别:

  • 第一步,导入需要的库:
import pandas as pd
import csv
  • 第二步,用以下参数读取你的CSV文件:
df = pd.read_csv(
    'your_file.csv',
    quoting=csv.QUOTE_NONNUMERIC,
    keep_default_na=True
)

读取之后的结果完全符合你的需求:

  • 第一行的name字段(对应CSV里的,,)会被识别为NaN
  • 第二行的name字段(对应CSV里的"")会被保留成空字符串''
  • 第三行的age字段(对应CSV里的末尾,,)会被识别为NaN
  • 带引号的数字比如"25"会自动转成数值类型25.0,不带引号的数字3也会正常识别为数值

如果你不想让带引号的数字被自动转成数值,想统一先保留字符串类型,之后再手动转换的话,可以再加个dtype=str参数,之后按需转换数值列:

# 先全以字符串类型读取
df = pd.read_csv(
    'your_file.csv',
    quoting=csv.QUOTE_NONNUMERIC,
    keep_default_na=True,
    dtype=str
)
# 手动将id和age列转为数值类型,无法转换的(比如NaN)会保持原样
df['id'] = pd.to_numeric(df['id'], errors='coerce')
df['age'] = pd.to_numeric(df['age'], errors='coerce')

这个方法的原理是csv.QUOTE_NONNUMERIC会告诉解析器:所有带引号的内容都当成字符串处理(空的引号就是空字符串),而不带引号的空内容则交给Pandas的默认逻辑识别为NaN,完美区分两种不同的空值情况~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 08:08:05