修复Object类型price列转数值型并求均值的代码报错问题
问题解决步骤
你的代码存在几个关键问题,以下是修正方案:
问题分析
dropna参数使用错误:dropna的axis参数用于指定行/列(0=行,1=列),要针对特定列删除缺失值,需用subset参数指定列名。inplace=True的误用:使用该参数时,原DataFrame会被直接修改,返回值为None,此时赋值给df会导致后续操作报错。- 未处理
?字符:原数据中的?不属于NaN,dropna无法自动识别移除,需先将其转为NaN再处理。 - 直接转int风险高:原列是字符串类型,建议先转浮点型,避免因潜在小数或格式问题导致转换失败。
修正后的完整代码
import pandas as pd import numpy as np # 读取数据时直接将?识别为NaN df = pd.read_csv('Automobile_data.csv', sep=',', na_values=['?']) # 删除price列的缺失值 df = df.dropna(subset=['price']) # 将price列转为浮点型(若确认都是整数,也可改用astype('int')) df['price'] = df['price'].astype(float) # 计算均值 print(df['price'].mean())
补充说明
- 若偏好使用
inplace=True,可修改为df.dropna(subset=['price'], inplace=True),但不推荐过度使用该参数,会直接修改原数据,不利于调试。 na_values=['?']能在读取阶段就完成特殊字符到NaN的转换,简化后续处理流程。
内容的提问来源于stack exchange,提问作者Techlover
相关产品推荐
相关产品推荐

