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

解决Pandas SettingWithCopyWarning问题并计算Whitby房屋数据年均值

解决SettingWithCopyWarning并优化日期处理

问题根源

你碰到的SettingWithCopyWarning,是因为filtered_df = housing_raw_data_df[housing_raw_data_df["Location"] == "Whitby"]得到的是原DataFrame的视图而非独立副本,后续对它的修改会触发Pandas的警告——这是在提醒你,你可能在修改原数据的切片副本,容易引发意料之外的问题。

两步解决优化方案

1. 避免视图修改,创建独立副本

在筛选时直接生成独立DataFrame副本,彻底规避视图修改的风险:

filtered_df = housing_raw_data_df[housing_raw_data_df["Location"] == "Whitby"].copy()

也可以用.loc语法完成筛选并生成副本:

filtered_df = housing_raw_data_df.loc[housing_raw_data_df["Location"] == "Whitby", :].copy()

2. 优化日期处理逻辑

别用字符串切片提取年份,建议先把Date列转为Pandas的datetime类型,再通过.dt.year提取年份——这种方法能兼容更多日期格式(比如2015/03/12、2015-03-12等),比字符串切片更可靠:

# 自动识别日期格式并转换为datetime类型
housing_raw_data_df["Date"] = pd.to_datetime(housing_raw_data_df["Date"], infer_datetime_format=True)
# 提取年份到新列
filtered_df["Year"] = filtered_df["Date"].dt.year

完整修改后的代码

import pandas as pd

# 读取CSV数据
housing_raw_data_df = pd.read_csv("MLS.csv")
# 将Date列转换为datetime类型
housing_raw_data_df["Date"] = pd.to_datetime(housing_raw_data_df["Date"], infer_datetime_format=True)
# 筛选Whitby数据并创建独立副本
filtered_df = housing_raw_data_df[housing_raw_data_df["Location"] == "Whitby"].copy()
# 提取年份
filtered_df["Year"] = filtered_df["Date"].dt.year
# 按年份分组计算CompBenchmark的平均值
average_data = filtered_df.groupby("Year")["CompBenchmark"].mean().reset_index()
# 过滤出2015-2021年的数据
average_data = average_data[(average_data["Year"] >= 2015) & (average_data["Year"] <= 2021)]
print(average_data)

额外提示

  • 如果想减少计算量,可以在分组前先过滤年份:
filtered_df = filtered_df[(filtered_df["Year"] >= 2015) & (filtered_df["Year"] <= 2021)]
  • 若pd.to_datetime无法识别日期格式,可手动指定格式规则,比如format="%Y-%m-%d"。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 07:46:08