【发布时间】:2017-12-19 22:13:39
【问题描述】:
假设我有以下 pandas DataFrame:
df = pd.DataFrame({
'team': ['Warriors', 'Warriors', 'Warriors', 'Rockets', 'Rockets'],
'player': ['Stephen Curry', 'Klay Thompson', 'Kevin Durant', 'Chris Paul', 'James Harden']})
当我尝试在 team 列上分组并执行操作时,我得到一个 SettingWithCopyWarning:
for team, team_df in df.groupby(by='team'):
# team_df = team_df.copy() # produces no warning
team_df['rank'] = 10 # produces warning
team_df.loc[:, 'rank'] = 10 # produces warning
SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
df_team['rank'] = 10
如果我取消注释生成子数据帧副本的行,我不会收到错误消息。这通常是避免此警告的最佳做法还是我做错了什么?
注意我不想编辑原始 DataFrame df。我也知道这个例子可以做得更好,但我的用例要复杂得多,需要对原始 DataFrame 进行分组,并根据不同的 DataFrame 和该唯一组的规范执行一系列操作。
【问题讨论】: