You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Pandas read_csv无法读取CSV文件全部数据的原因排查求助

问题分析与解决方案

我帮你捋捋这个问题——这大概率是CSV文件本身的格式/编码小瑕疵,而非pandas read_csv的通用错误。毕竟同一数据源转成XLSX后就能正常读取,说明数据本身没问题,问题出在CSV的解析环节。

核心现象回顾

  • read_csv读取时,部分日期区间(比如2017/04/01 23点左右)的h50字段全为NaN
  • 把同一CSV转成XLSX后用read_excel读取,对应时间段的数据完全正常
  • 问题仅出现在无规律的部分日期,不是全局异常

可能的原因&验证方法

1. CSV文件的分隔符/转义异常

CSV文件里可能存在未正确转义的换行符、引号,或者行尾多出来的分隔符,导致pandas解析时字段错位——看起来是h50列缺值,实际是列对应错了。

  • 验证:用文本编辑器(比如Notepad++)打开CSV,定位到2017/04/01 23点的行,看看数值字段有没有被引号包裹、或者行尾有没有多余的逗号。
  • 解决尝试:
    resume = pnd.read_csv(
        "/content/gdrive/MyDrive/hcln/h_RiA_0.50_full_time.csv",
        parse_dates=[0],
        engine='python',  # Python引擎比默认的C引擎容错性更强
        skip_blank_lines=False  # 保留空行,方便排查错位
    )
    

2. 编码问题

CSV文件可能用了非UTF-8的编码(比如Latin1、CP1252),导致pandas解析时部分字符乱码,数值无法被识别成float,最终变成NaN

  • 解决尝试:
    resume = pnd.read_csv(
        "/content/gdrive/MyDrive/hcln/h_RiA_0.50_full_time.csv",
        parse_dates=[0],
        encoding='latin1'  # 常见的非UTF8编码,也可以试试'cp1252'
    )
    

3. 数值字段的特殊格式干扰

Excel会自动处理数值里的隐藏字符(比如空格、千分位分隔符、非打印字符),但pandas默认不会。如果CSV里的h50值带有这些干扰项,就会被解析成NaN

  • 解决尝试:用转换器强制清理数值字段
    def clean_h50(x):
        x = x.strip()  # 去掉前后空格
        if not x:
            return pd.NA
        # 如果有千分位逗号,替换成小数点(根据实际情况调整)
        return float(x.replace(',', '.'))
    
    resume = pnd.read_csv(
        "/content/gdrive/MyDrive/hcln/h_RiA_0.50_full_time.csv",
        parse_dates=[0],
        converters={'h50': clean_h50}
    )
    

4. 日期解析的隐性匹配问题

虽然你指定了parse_dates=[0],但可以确认下CSV和XLSX解析后的日期索引是否完全一致:

# 读取CSV后检查索引类型和值
print(resume.index.dtype)
print(resume.index[resume.index.str.contains('2017-04-01 23')])

如果索引格式有细微差异,也会导致loc查询时看似匹配但实际数值异常,但从你的示例看,这个可能性较低。

下一步排查建议

  1. 先用resume.info()对比CSV和XLSX读取后的h50列非空值数量,确认缺失的范围
  2. resume[resume['h50'].isna()]导出所有缺失行,去CSV里找对应的原始内容,看有没有共性问题
  3. 逐步尝试上面的参数调整,大概率能定位到问题根源

内容的提问来源于stack exchange,提问作者alramirezca

火山引擎 最新活动