pandas新增列触发SettingWithCopyWarning警告的修复方法
问题根源
警告并非来自你写的创建月份列、分组聚合的两行代码本身,问题出在daytime_data的生成环节:它是你从其他原始DataFrame通过条件筛选、切片得到的结果,pandas无法自动判定它是原数据的视图(修改会同步改动原数据)还是独立副本(修改不影响原数据),因此在你给它新增列时弹出风险提示,避免出现“以为改了数据实际没生效”或者“误改原始数据”的隐蔽问题。
你当前代码的运行结果大概率是正确的,这个警告不是报错,只是提示存在不规范的歧义写法。
修复方法
优先推荐方案(最稳妥):在最初生成
daytime_data的切片代码末尾显式加.copy(),明确声明这是独立副本,后续所有操作都不会再触发这类警告。
比如你之前生成daytime_data的代码如果是类似的筛选逻辑:# 原切片逻辑示例:筛选白天时段的交通数据 daytime_data = traffic_data[traffic_data['day_period'] == 'day']修改为:
daytime_data = traffic_data[traffic_data['day_period'] == 'day'].copy()改完之后你原来写的新增月份列、分组统计的代码完全不需要调整,直接运行即可:
daytime_data['month'] = daytime_data['date_time'].dt.month by_month = daytime_data.groupby('month').mean() print(by_month['traffic_volume'])临时修复方案:按照警告提示,把新增列的赋值语句改成
.loc显式索引写法:daytime_data.loc[:, 'month'] = daytime_data['date_time'].dt.month注意:如果
daytime_data本身是未声明副本的切片,部分pandas版本下这个写法依然会弹出警告,优先用第一种方案。
内容的提问来源于stack exchange,提问作者Álvaro V.
相关产品推荐
相关产品推荐

