熊猫无法避免SettingWithCopyWarning

时间:2017-02-12 16:31:14

标签: python pandas warnings

我有一个这样的数据框:

A     B     C

15   'ds'   '    0.000'
32   'ds'   '    1.000'
56   'ds'   '    2,700.000'
45   'gb'   '    7.000'

我想将列C的值更改为整数;所以我正在做的事情是这样的:

df.loc[:,'C'] = df.loc[:,'C'].apply(lambda x: int(float(x.strip().replace(',',''))))

这样做,但是,我得到了令人讨厌的SettingWithCopyWarning。如果我使用loc

,为什么会出现这种情况

2 个答案:

答案 0 :(得分:0)

我会使用以下方法:

In [292]: df['C'] = pd.to_numeric(df['C'].str.strip().str.replace(',', ''), errors='coerce')

In [293]: df
Out[293]:
    A   B       C
0  15  ds     0.0
1  32  ds     1.0
2  56  ds  2700.0
3  45  gb     7.0

In [294]: df.dtypes
Out[294]:
A      int64
B     object
C    float64
dtype: object

答案 1 :(得分:0)

Pandas在某些情况下会出现误报(即,根据作业的顺序,你可以分配给副本,但在当前情况下不是) 。这个答案很有帮助:How to deal with SettingWithCopyWarning in Pandas?

...但是,就个人而言,当我使用.loc并仍然收到警告时,我会采取上述答案中提供的步骤并禁用警告:     pd.options.mode.chained_assignment = None