在groupby.get_group获取的切片上设置WithCopyWarning

时间:2015-02-07 16:19:42

标签: pandas group-by slice

有没有办法确定DataFrame是否是某个其他对象的片段来处理SettingWithCopyWarning的情况?

我终于能够在我正在进行计算的情况下重现SettingWithCopyWarning的示例:df [' new_col'] = value。

问题是df本身是来自grpBY.get_group()的切片返回。这很难评估,因为添加列是在计算中做了很多事情。

所以现在我明白df本身就是一个更大的数据帧的片段,我理解警告,但是调试它非常困难,因为我必须明白传递给我的服务函数的DF是一个片段。这是一个例子:     进口口     将pandas导入为pd     导入numpy为np

df = pd.DataFrame(np.random.randn(5,5), columns = ['col'+str(i) for i in range(5)])
df['grpID'] = df.apply(lambda x : df.columns[np.random.randint(5)], axis=1)
gBY = df.groupby('grpID')

def WorkOnDataFrameGroupSlice(gDF):
    gDF['new_col'] = gDF.col1/gDF.col3
    print gDF

for g in gBY.groups.keys():
    gDF = gBY.get_group(g)
    WorkOnDataFrameGroupSlice(gDF)

输出:

>>> WorkOnDataFrameGroupSlice(gBY)
__main__:4: 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 the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
      col0      col1      col2      col3      col4 grpID   new_col
1  0.30118  0.649366 -2.004724 -0.102476 -0.312678  col4 -6.336769
       col0      col1      col2      col3      col4 grpID  new_col
2 -0.344893  0.579363 -0.556483 -0.383786 -2.312829  col2  -1.5096
       col0      col1      col2      col3      col4 grpID    new_col
0 -0.916921 -0.329640 -0.959094 -0.667048  0.902691  col3   0.494177
3  1.936567  1.082553 -1.059511 -0.102200  0.902362  col3 -10.592540
4  0.808047  0.737737  0.380464  0.048980  0.674635  col3  15.061955

0 个答案:

没有答案