使用pd.read_csv读取CSV后,如何将object类型year列转为int?
解决year列整数类型转换问题
问题原因拆解
- 执行
df['year'] = df['year'].astype(int)报错,是因为列中存在字符串'None',而非pandas默认的缺失值(pd.NA/np.nan),纯整数类型无法识别这类字符串。 - 执行
df['year'] = df['year'].astype(str).astype('Int64')报错,是因为object列可能混有非字符串元素,或未先清理无效字符串值,导致无法直接转换为带缺失值的整数类型Int64。
具体解决方案
1. 先清理无效字符串值
把列中的'None'字符串替换成pandas标准缺失值,为后续转换铺路:
import pandas as pd # 将字符串'None'替换为pd.NA df['year'] = df['year'].replace('None', pd.NA)
2. 转换为支持缺失值的整数类型
用pd.to_numeric自动处理数值转换,同时强制将无法转换的内容转为缺失值,最后转为Int64类型(大写I,支持缺失值存储):
# 转换为数值类型,无法转换的设为缺失值,再转为Int64 df['year'] = pd.to_numeric(df['year'], errors='coerce').astype('Int64')
可选:一步完成清理与转换
也可以合并成一行代码,直接处理所有无效值:
df['year'] = pd.to_numeric(df['year'], errors='coerce').astype('Int64')
errors='coerce':自动把所有无法转为数值的内容(包括'None'、非数字字符串)转为np.nanastype('Int64'):将浮点类型的数值转为支持缺失值的整数类型
验证转换结果
转换后可以用以下命令确认效果:
# 查看列数据类型 print(df['year'].dtype) # 统计缺失值数量 print(df['year'].isna().sum())
内容的提问来源于stack exchange,提问作者user20517034
相关产品推荐
相关产品推荐

