我有一个这样的数据框:
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 :(得分: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