使用pandas read_csv修改列数据类型时出现转换错误的求助
问题解决方法
错误原因分析
- 代码参数错误:
dtype={"USIA":int()}里的int()是错误写法,int()会生成一个整数0,而pandas的dtype参数需要的是数据类型对象(直接写int即可)。 - 数据内容问题:错误信息
invalid literal for int() with base 10: 'USIA'说明CSV文件中USIA列存在字符串值USIA(大概率是文件里重复出现了表头行,或者某行数据错误填充了表头文本)。
分步解决方案
步骤1:修正dtype参数写法
先把代码里的int()改为int,这是基础错误修正:
import pandas as pd DPT = pd.read_csv("DPT KOTA MADIUN.csv", dtype={"USIA": int}, low_memory=False)
如果运行后仍报错,说明文件里确实存在非数值内容,执行下一步。
步骤2:处理非数值数据
先读取文件不指定dtype,再用pd.to_numeric强制转换,将无法转为整数的内容转为NaN(如果需要保留这些行):
import pandas as pd # 先读取全部数据 DPT = pd.read_csv("DPT KOTA MADIUN.csv", low_memory=False) # 转换USIA列,非数值转为NaN,使用支持NaN的Int64类型 DPT['USIA'] = pd.to_numeric(DPT['USIA'], errors='coerce').astype('Int64')
如果不需要包含USIA为非数值的行,可以转换后删除这些行:
DPT = DPT.dropna(subset=['USIA'])
步骤3:检查并清理CSV文件
打开CSV文件确认:
- 是否存在重复的表头行(比如中间某行又写了
USIA等表头文本),如果有,读取时用skiprows参数跳过,例如跳过第2行:DPT = pd.read_csv("DPT KOTA MADIUN.csv", dtype={"USIA": int}, low_memory=False, skiprows=[1]) - 是否存在其他非数字字符(比如空格、字母),可以手动清理这些内容后再读取。
内容的提问来源于stack exchange,提问作者asrl94
相关产品推荐
相关产品推荐

