Python 在预测建模脚本中设置CopyWarning

Python 在预测建模脚本中设置CopyWarning,python,pandas,Python,Pandas,我有一个脚本,可以进行一些预测建模,并使用熊猫数据帧。脚本正在抛出一个带有CopyWarning的设置,但是堆栈跟踪指向pandas库而不是我的代码 我已经缩小了引起警告的代码行 如何更改代码以避免引发此警告 我不想抑制此警告,我想修复它 谢谢 这是引起警告的线路 next_round_x.loc[:, feature_cols] = scaler.transform(next_round_x[feature_cols]) 这是正在发出的警告: /home/ubuntu/environment

我有一个脚本,可以进行一些预测建模,并使用熊猫数据帧。脚本正在抛出一个带有CopyWarning的设置,但是堆栈跟踪指向pandas库而不是我的代码

我已经缩小了引起警告的代码行

如何更改代码以避免引发此警告

我不想抑制此警告,我想修复它

谢谢

这是引起警告的线路

next_round_x.loc[:, feature_cols] = scaler.transform(next_round_x[feature_cols])
这是正在发出的警告:

/home/ubuntu/environment/virtualenvs/predictions/lib/python3.6/site-packages/pandas/core/indexing.py:966: 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

See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy
  self.obj[item] = s
下面是上下文的完整功能

def create_predictions():
#获取清理后的AFL数据集和列顺序
afl_data=afl_data_cleaning_v2.准备afl_data()
有序列=afl\u data.columns
下周赔率=获取下周赔率(“数据/周赔率.csv”)
fixture=get_fixture(“data/afl_fixtures.csv”)
下周数据=获取下周数据(afl数据)
游戏ID下一轮=创建下一周游戏ID(afl数据)
下周
#将下周的比赛添加到我们的afl_数据框架中
afl_data=afl_data.append(下一周)df.reset_索引(drop=True)
#附加下周的游戏以匹配结果(我们需要这样做才能运行我们的功能创建)
match_results=afl_data_cleaning_v2.获取_cleaned_match_results().追加(下周)
#将下周的比赛附加到赔率上
赔率=(afl\u数据\u清理\u v2.get\u cleaned\u赔率().pipe(lambda df:df.append(下一周\u df[df.columns]))
.reset_索引(drop=True))
特征\u df=afl\u特征\u创建\u v2.准备\u afl\u特征(afl\u数据=afl\u数据,匹配结果=匹配结果,赔率=赔率)
#通过只获取下周df中没有的游戏ID来获取火车df
train\u df=features\u df[~features\u df.game.isin(下周\u df.game)]
#获取结果并合并到要素
匹配结果=(pd.read\u csv(“data/afl\u match\u results.csv”)
.rename(列={'Game':'Game'})
.assign(结果=lambda df:df.apply(如果行['Home.Points']>行['Away.Points'],则lambda行:1,否则为0,轴=1)))
train_df=pd.merge(train_df,match_results['game','result']],on='game')
列x=列df.drop(列=['result'])
列车y=列车df.结果
下一轮=features\u df[features\u df.game.isin(下一周\u df.game)]
#拟合逻辑回归模型-请注意,我们的预测结果按[客场球队概率,主场球队概率]的顺序排列
lr_最佳参数={'C':0.01,
“类重量”:无,
“双重”:假,
“fit_intercept”:正确,
“截距缩放”:1,
“最大值”:100,
“多类”:“ovr”,
“n_jobs”:1,
“惩罚”:“l2”,
“随机状态”:无,
“解算器”:“牛顿cg”,
“tol”:0.0001,
“详细”:0,
“热启动”:False}
特征_cols=[col for col in train_df,如果col.startswith('f_')]
#比例特征
scaler=StandardScaler()
train\ux[feature\u cols]=定标器.fit\u变换(train\ux[feature\u cols])

下一轮[feature\u cols]=scaler.transform(下一轮[feature\u cols])下一轮[code>df\u copy=next\u-round\u x.copy().loc[:,feature\u cols]
然后
df-copy=scaler.transform(df\u copy[feature\u cols])
解决错误?更改这行:`
next\u-round\u-x=features\u-df.game.isin(下一周游戏)].copy()
非常确定错误与我建议的行无关,因为
.copy()
不涉及您的数据,只创建数据帧的深度副本,因此您没有处理副本。明白了-谢谢。警告已经消失-请随意回答下面的问题,我会接受。是的@ChrisMcKinnel我知道你必须在那里的某个地方抛出
.copy()
。我只是把它放错地方了。有没有可能解决这个错误?改变这行:`
next\u round\u x.copy().loc[:,feature\u cols]
然后
df\u copy=scaler.transform(df\u copy[feature\u cols])
来解决这个错误呢非常确定错误与我建议的行无关,因为
.copy()
不涉及您的数据,只创建了数据帧的深度副本,所以您没有处理副本。明白了-谢谢Erfan。警告已经消失-请随意回答下面的问题,我会接受。是的@ChrisMcKinnel我知道你必须在那里的某个地方抛出
.copy()
。我只是把它放错地方了。