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

