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

如何将DataFrame字符串类型数字列转float/int?astype报错求解决

问题解决:DataFrame字符串列混合数字格式转换报错

错误原因

你用apply处理列时,传入cek_string的参数x是单个字符串元素,而astype()是pandas Series/DataFrame的方法,单个字符串对象没有这个属性,所以会报错'str' object has no attribute 'astype'。

修正方案

方案1:修改转换函数

把astype()替换成Python内置的类型转换函数float()/int(),直接对字符串进行转换:

def cek_string(x):
    if '.' in x:
        return float(x)
    else:
        return int(x)

# 应用到列(无需额外lambda,直接传函数名即可)
df['TotalCharges'] = df['TotalCharges'].apply(cek_string)

方案2:简化为lambda表达式

不需要单独定义函数,直接用lambda一行完成:

df['TotalCharges'] = df['TotalCharges'].apply(lambda x: float(x) if '.' in x else int(x))

可选:处理含空格的情况

如果字符串里可能包含前后空格(比如' 99.99 '或' 100 '),可以先做去除空格处理:

df['TotalCharges'] = df['TotalCharges'].apply(lambda x: float(x.strip()) if '.' in x.strip() else int(x.strip()))

注意事项

转换后该列的类型会变成object,因为列中同时存在int和float两种类型。如果不需要严格区分整数和浮点数,也可以统一转换为float类型(整数转float不会丢失精度),这样列类型会更规整:

df['TotalCharges'] = df['TotalCharges'].astype(float)

内容的提问来源于stack exchange,提问作者Jovian Aditya

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:30:56