使用astype修改year列类型为int后数据类型仍为object怎么办
Pandas astype转换year列类型失败的常见原因及解决方法
1. 未对转换结果赋值
pandas中astype()方法默认不会修改原DataFrame,而是返回一个转换类型后的新对象,你原来的写法只执行了转换操作但没有把结果赋值给原变量,自然看不到变更。正确写法如下:
df = df.astype({'year': int})
2. 列内存在无法转换为int的异常值
如果已经赋值但类型还是object,说明year列中存在不符合整数格式的内容,常见情况包括:
- 存在非数字字符串,比如
'202x'、' 2023'(带前后空格)、''(空字符串) - 存在空值
NaN,旧版本pandas的原生int类型不支持存储空值,列中只要有NaN就会自动被推导为object类型,这种情况可以改用pandas的可空整数类型Int64:df['year'] = df['year'].astype('Int64') - 执行转换时加了
errors='ignore'参数,遇到转换错误时会直接返回原列数据不抛出异常,自然看不到转换效果。
3. 排查方法
你可以先执行以下代码检查列内的异常内容:
# 筛选出无法转换为数字的异常值 invalid_values = df['year'][pd.to_numeric(df['year'], errors='coerce').isna()] print(invalid_values)
清理完异常值后再执行类型转换即可生效。
内容的提问来源于stack exchange,提问作者Yasmine
相关产品推荐
相关产品推荐

