Skip to content

Possible spurious SettingWithCopyWarning #6757

Closed
@jorisvandenbossche

Description

@jorisvandenbossche

Found some SettingWithCopyWarning warnings in older code with newer pandas. But it's quite possible that these are just side-effects of the warning ('False positives') and it cannot easily be detected, but I am no expert in that field.

Simplified dummy example:

In [1]: df = pd.DataFrame(np.arange(20).reshape(5, 4), columns=list('ABCD'))
In [2]: df
Out[2]:
    A   B   C   D
0   0   1   2   3
1   4   5   6   7
2   8   9  10  11
3  12  13  14  15
4  16  17  18  19

# reassign a selection to df
In [3]: df = df[(df['A']%5)!=0]

Setting a value with .loc[] (this output is from master, in 0.13.1 I got even the advice to Try using .loc[row_index,col_indexer] = value instead while I was using it ... in master just the warning):

In [4]: df.loc[df['B']==17, 'C'] = 1000
C:\Anaconda\envs\devel\Scripts\ipython-script.py:1: SettingWithCopyWarning: A va
lue is trying to be set on a copy of a slice from a DataFrame
  #!C:\Anaconda\envs\devel\python.exe

And then replacing a value with replace (also here the advice to use .loc is a little bit strange I think):

In [5]: df['D'] = df['D'].replace({7:2000})
C:\Anaconda\envs\devel\Scripts\ipython-script.py:1: SettingWithCopyWarning: A va
lue is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_index,col_indexer] = value instead
  #!C:\Anaconda\envs\devel\python.exe

In [6]: df
Out[6]:
    A   B     C     D
1   4   5     6  2000
2   8   9    10    11
3  12  13    14    15
4  16  17  1000    19

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions