python – 列创建时的SettingWithCopyWarning
发布时间:2020-12-20 11:54:44 所属栏目:Python 来源:网络整理
导读:我正在尝试为我的数据创建一个名为’mv_avg’的移动平均列.我得到了一个我无法修复的SettingWithCopyWarning.我可以抑制警告,但我无法弄清楚我的代码在哪里创建副本,我想利用最佳实践.我在下面创建了一个可推广的示例来说明问题. data = {'category' : ['a',
我正在尝试为我的数据创建一个名为’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 pd data = {'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 pd data = {'category' : ['a',6]} df = pd.DataFrame(data) indexer = df[df['category'] == 'a'].index df_a = df.loc[indexer,:] df_a['mv_avg'] = df_a['value'].rolling(window=2).mean() (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |