Pandas中带.0后缀的字符串列无法转换为int类型如何解决
转换失效原因
astype('int')转换object类型字符串列时,会逐元素调用Python原生的整数解析逻辑,而原生int()函数仅能解析纯整数格式的字符串,无法识别带小数点的数值字符串——哪怕小数位是0,比如直接执行int('1.0')就会抛出ValueError: invalid literal for int() with base 10: '1.0',这就是报错的核心原因。
正确转换方案
根据数据场景可以选择以下几种常用实现方式:
- 两步类型转换(最通用):先将字符串解析为浮点型,再转为整数型,浮点型转整数时会自动截断小数位
import pandas as pd df = pd.DataFrame({ 'foo': ['1.0', '2.0', '3.0']}) df['foo'] = df['foo'].astype(float).astype(int) - 用
pd.to_numeric做兼容转换:适合列中可能存在混杂格式数值字符串的场景,该方法会自动识别合法数值字符串转为浮点型,后续再转int即可df['foo'] = pd.to_numeric(df['foo']).astype(int) - 字符串预处理后转换:如果确认所有值都固定为
.0后缀的格式,可以先做字符串裁剪去掉后缀,再直接转整数# 正则匹配替换结尾的.0 df['foo'] = df['foo'].str.replace(r'\.0$', '', regex=True).astype(int)
注意:如果列中存在
'2.5'这类非整数值,直接转float再转int会直接截断小数得到2,若业务要求四舍五入,需要在转int前加.round()处理;若存在非数值类脏数据,需要先做异常值清洗再做类型转换。
内容的提问来源于stack exchange,提问作者Alec Mather
相关产品推荐
相关产品推荐

