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查询时看似匹配但实际数值异常,但从你的示例看,这个可能性较低。
下一步排查建议
- 先用
resume.info()对比CSV和XLSX读取后的h50列非空值数量,确认缺失的范围 - 用
resume[resume['h50'].isna()]导出所有缺失行,去CSV里找对应的原始内容,看有没有共性问题 - 逐步尝试上面的参数调整,大概率能定位到问题根源
内容的提问来源于stack exchange,提问作者alramirezca




