如何将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
相关产品推荐
相关产品推荐

