Pandas DataFrame:SettingWithCopyWarning:试图在DataFrame的切片副本上设置一个值

马蒂亚斯(Matthias):

我知道有很多关于此警告的帖子,但是我找不到适合我情况的解决方案。这是我的代码:

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!
耶斯雷尔:

我认为需要copyloc选择列省略

df = df[df['my_col'].notnull()].copy()
df['my_col'] = df['my_col'].astype(int).astype(str)

说明

如果df稍后再修改值,您会发现修改不会传播回原始数据(df),并且Pandas会发出警告。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Pandas SettingWithCopyWarning:正在尝试从DataFrame的切片副本上设置一个值

为什么 Pandas 会抛出错误:“试图在 DataFrame 中切片的副本上设置一个值。”

pandas:尝试在DataFrame的切片副本上设置一个值

Pandas.to_datetime() 试图在 DataFrame 的切片副本上设置值

Python警告:“ SettingWithCopyWarning:试图在来自DataFrame的切片的副本上设置一个值”

SettingWithCopyWarning:正在尝试从DataFrame的切片副本上设置一个值警告

使用iloc时,“试图从DataFrame的切片副本上设置一个值”错误

试图在DataFrame的切片副本上设置一个值

试图在DataFrame的切片副本上设置一个值-尝试过以前的解决方案

使用地图时的熊猫警告:试图在DataFrame的切片副本上设置一个值

根据另一个DataFrame切片pandas.DataFrame

正在尝试从DataFrame的切片副本上设置一个值

试图创建一个新列提供了一个值正在尝试在 DataFrame 中的切片副本上设置

如何在不使用for循环的情况下基于来自另一个Dataframe的值对pandas DataFrame进行切片?

如何基于Pandas DataFrame中的切片正确设置值

如何按列值切片过滤 Pandas DataFrame

按列值在DataFrame切片上查找计算函数的最快方法(Python pandas)

附加后,试图在来自 DataFrame 的切片副本上设置值

试图在来自 DataFrame 的切片副本上设置值。- 熊猫

如何解决“试图在DataFrame的切片副本上设置值”?

根据行数切片Pandas Dataframe

Pandas:制作每月的 DataFrame 切片

用DatetimeIndex切片Pandas DataFrame

如何切片pandas.DataFrame?

如何通过不同的值对一个Pandas数据框列的元素进行切片?

在DataFrame的切片副本上设置值

从numpy中的beta分布中采样随机数并将结果分配给pandas dataframe切片-SettingWithCopyWarning

警告-试图在切片的副本上设置值

将值分配给数据帧中的新列时出现错误“试图在数据帧的切片副本上设置一个值”