Pandas read_csv无法转换带千位与小数分隔符的数值问题
解决方法
问题出在你指定了dtype参数,这会跳过pandas对千分位/小数分隔符的解析逻辑,直接强制将原始字符串转为float,导致格式不兼容的报错。调整方案如下:
修正后的代码
import os import pandas as pd from datetime import datetime filepath = 'original_data' filename = 'Real_Verbrauch_DE_201501010000_202303042359_Viertelstunde.csv' csv_path = os.path.join(filepath, filename) df_original = pd.read_csv( csv_path, sep=';', thousands='.', decimal=',', parse_dates=['Datum'], date_format='%d.%m.%Y' # 替代date_parser的推荐写法 ) # 确保目标列全部转为float类型(处理可能的异常值) target_cols = [ 'Gesamt (Netzlast) [MWh] Originalauflösungen', 'Residuallast [MWh] Originalauflösungen', 'Pumpspeicher [MWh] Originalauflösungen' ] df_original[target_cols] = df_original[target_cols].apply(pd.to_numeric, errors='coerce')
关键说明
- 移除
dtype参数:pandas的thousands和decimal设置会自动处理1.234,56这类格式的数值,但指定dtype会绕过这个解析流程,直接尝试转换原始字符串,必然报错。 - 用
date_format替代date_parser:这是pandas官方推荐的日期解析方式,代码更简洁且性能更优。 - 强制数值转换:如果读取后仍有部分值未自动转换,
pd.to_numeric(errors='coerce')会将无法解析的异常值转为NaN,同时确保有效数值全部转为float类型,避免报错。
内容的提问来源于stack exchange,提问作者Lukas
相关产品推荐
相关产品推荐

