我知道有很多关于此警告的帖子,但是我找不到适合我情况的解决方案。这是我的代码:
df.loc[:, 'my_col'] = df.loc[:, 'my_col'].astype(int)
#df.loc[:, 'my_col'] = df.loc[:, 'my_col'].astype(int).copy()
#df.loc[:, 'my_col'] = df['my_col'].astype(int)
它产生警告:
SettingWithCopyWarning:正在尝试从DataFrame的切片副本上设置一个值。尝试改用.loc [row_indexer,col_indexer] = value
即使我按建议更改了代码,仍然收到此警告?我需要做的就是转换一列的数据类型。
**备注:**最初,该列是float类型,具有一个小数点(例如:4711.0)。因此,我将其更改为整数(4711),然后更改为字符串('4711')-仅删除小数。
感谢你的帮助!
更新:警告是对之前完成的原始数据筛选的副作用。我错过了DataFrame.copy()。改用副本解决了问题!
df = df[df['my_col'].notnull()].copy()
df.loc[:, 'my_col'] = df['my_col'].astype(int).astype(str)
#df['my_col'] = df['my_col'].astype(int).astype(str) # works too!
我认为需要copy
和loc
选择列省略:
df = df[df['my_col'].notnull()].copy()
df['my_col'] = df['my_col'].astype(int).astype(str)
说明:
如果df
稍后再修改值,您会发现修改不会传播回原始数据(df
),并且Pandas会发出警告。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句