2017-02-12 36 views
0

我有这样一个数据帧:大熊猫无法避免SettingWithCopyWarning

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

回答

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 
0

熊猫引发此警告在某些情况下用假阳性(即当,基于任务的顺序,你可以分配给副本,但在当前情况下不是)。这个答案是有帮助的:How to deal with SettingWithCopyWarning in Pandas?

...但是,就个人而言,当我使用.loc,仍然收到警告,我走在上面的答案提供的步骤,并且禁用警告: pd.options.mode.chained_assignment = None