【发布时间】:2018-11-24 04:48:03
【问题描述】:
我有这个代码示例,它应该使用 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] = 取而代之的价值
请参阅文档中的注意事项: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
并且在“真实”数据上运行代码时非常慢。
据我了解,此警告建议使用loc,但我已经在使用它了!
pandas 是否将 group-by 返回的数据帧视为切片?我怎样才能摆脱这个警告并确保预期的行为?
【问题讨论】:
-
警告不一定与您的程序性能有关。警告就是警告,通常是误报。您可以尝试进行基准测试,看看需要花费什么时间。