python – 列创建时的SettingWithCopyWarning

python – 列创建时的SettingWithCopyWarning,第1张

概述我正在尝试为我的数据创建一个名为’mv_avg’的移动平均列.我得到了一个我无法修复的SettingWithCopyWarning.我可以抑制警告,但我无法弄清楚我的代码在哪里创建副本,我想利用最佳实践.我在下面创建了一个可推广的示例来说明问题. data = {'category' : ['a', 'a', 'a', 'b', 'b', 'b'], 'value' : [1,2,3,4,5,6] 我正在尝试为我的数据创建一个名为’mv_avg’的移动平均列.我得到了一个我无法修复的SettingWithcopyWarning.我可以抑制警告,但我无法弄清楚我的代码在哪里创建副本,我想利用最佳实践.我在下面创建了一个可推广的示例来说明问题.

data = {'category' : ['a','a','b','b'],'value' : [1,2,3,4,5,6]}df = pd.DataFrame(data)df_a = df.loc[df['category'] == 'a']df_a['mv_avg'] = df_a['value'].rolling(window=2).mean()

返回:

SettingWithcopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.Try using .loc[row_indexer,col_indexer] = value instead

我也尝试了更详细的版本:

df_a.loc[:,'mv_avg'] = df_a.loc[:,'value'].rolling(window=2).mean()

但我得到了同样的错误.在没有警告的情况下实现这一目标的最佳方法是什么?

解决方法 你可以使用.copy()创建一个副本

import pandas as pddata = {'category' : ['a',6]}df = pd.DataFrame(data)df_a = df.loc[df['category'] == 'a'].copy()df_a['mv_avg'] = df_a['value'].rolling(window=2).mean()

或者您可以使用索引器,如:

import pandas as pddata = {'category' : ['a',6]}df = pd.DataFrame(data)indexer = df[df['category'] == 'a'].indexdf_a = df.loc[indexer,:]df_a['mv_avg'] = df_a['value'].rolling(window=2).mean()
总结

以上是内存溢出为你收集整理的python – 列创建时的SettingWithCopyWarning全部内容,希望文章能够帮你解决python – 列创建时的SettingWithCopyWarning所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193751.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存