You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:01:25