使用loc时的pandas警告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用loc时的pandas警告相关的知识,希望对你有一定的参考价值。

我有这个代码示例,它应该使用group-by将数据帧拆分为较小的数据帧,如果'num'列中的数字是偶数,则修改较小的数据帧:

import pandas as pd

df = pd.DataFrame({
    'id1': [1]*5+[2]*5,
    'num': range(11, 21),
    'x': range(10)

})
print df
for id1, grouped_df in df.groupby('id1'):
    grouped_df.loc[grouped_df['num'] % 2 == 0, 'num'] = 'even'
    print grouped_df

print df

但是,当我运行此代码时,我遇到警告:

/usr/local/lib/python2.7/dist-packages/pandas/core/indexing.py:537:SettingWithCopyWarning:尝试在DataFrame的切片副本上设置一个值。尝试使用.loc [row_indexer,col_indexer] = value

请参阅文档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

在“真实”数据上运行时代码非常慢。

根据我的理解,这个警告建议使用loc,但我已经在使用它了! pandas是否将group-by返回的数据帧视为切片?我怎样才能摆脱这种警告并确保预期的行为?

答案

使用copy

for id1, grouped_df in df.groupby('id1'):
    grouped_df = grouped_df.copy()
    grouped_df.loc[grouped_df['num'] % 2 == 0, 'x'] = 'even'
    print (grouped_df)

   id1  num     x
0    1   11     0
1    1   12  even
2    1   13     2
3    1   14  even
4    1   15     4
   id1  num     x
5    2   16  even
6    2   17     6
7    2   18  even
8    2   19     8
9    2   20  even

以上是关于使用loc时的pandas警告的主要内容,如果未能解决你的问题,请参考以下文章

使用 .loc() 时的 Pandas KeyError [重复]

Python pandas 数据框警告,建议改用 .loc 吗?

pandas常用

pandas警告:SettingWithCopyWarning

pandas 用 .loc[,]=value 筛选并原地赋值回原来的 DataFrame

pandas DataFrame 警告(SettingWithCopyWarning)