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

如何将Pandas DataFrame数据迁移至不同类型的DataFrame变量,及处理汽车价格列时to_numeric返回NaN的问题

如何将Pandas DataFrame数据迁移至不同类型的DataFrame变量,及处理汽车价格列时to_numeric返回NaN的问题

嘿,我来帮你搞定这个问题!看起来你现在有两个核心需求:一是把原DataFrame里的价格数据迁移到新变量中(完全不改动原数据),二是解决pd.to_numeric()返回NaN的问题,同时还想按汽车品牌分组计算平均价格对吧?咱们一步步拆解来解决:

一、正确迁移数据到新变量(不修改原DataFrame)

要复制原DataFrame的列到独立变量,一定要用.copy()方法,这样新变量和原数据完全隔离,后续操作不会影响原DataFrame:

# 复制Price列到新的Series变量,和原DF彻底独立
price_series = car_sales["Price"].copy()

二、解决to_numeric返回NaN的问题

你之前的代码里,清理逗号的时候没加str.前缀,导致只替换了整个元素等于,的情况,而不是每个价格字符串里的逗号,这才是转数值时出现NaN的关键!正确的字符串清理应该是这样的:

# 先复制列,避免修改原数据
price_clean = car_sales["Price"].copy()
# 去掉价格里的$符号(regex=False避免把$当作正则元字符)
price_clean = price_clean.str.replace("$", "", regex=False)
# 去掉价格里的逗号,同样要用str.前缀做字符串级别的替换
price_clean = price_clean.str.replace(",", "", regex=False)
# 转换为数值类型,errors="coerce"会把无法转换的内容变成NaN
price_numeric = pd.to_numeric(price_clean, errors="coerce")

如果转换后还是有NaN,你可以用下面的代码排查哪些行没处理成功,看看是不是还有其他非数字字符(比如空格、字母):

# 查看转换失败的原价格内容
print(price_clean[price_numeric.isna()])

三、按品牌分组计算平均价格

你之前直接把price_data传入groupby()的写法不对,因为price_numeric是独立的Series,不能直接作为原DF的列名使用。可以用两种方式实现分组计算:

方法一:创建临时DataFrame再分组

# 复制原DF的Make列,加上清理后的价格列
temp_df = car_sales[["Make"]].copy()
temp_df["Cleaned_Price"] = price_numeric
# 按品牌分组计算平均价格
avg_price_by_make = temp_df.groupby("Make")["Cleaned_Price"].mean()

方法二:直接用Series组合分组

# 用原DF的Make列和清理后的价格Series构建临时DataFrame再分组
avg_price_by_make = pd.DataFrame({
    "Make": car_sales["Make"],
    "Cleaned_Price": price_numeric
}).groupby("Make")["Cleaned_Price"].mean()

这样操作下来,既不会修改原DataFrame,又能得到正确的平均价格结果啦!

备注:内容来源于stack exchange,提问作者200 OK

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 11:19:30