我知道有很多关于这个警告的帖子,但是我找不到解决我的问题的办法。这是我的密码:
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:试图在数据帧切片的副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value
即使我按照建议更改了代码,我仍然收到此警告?我所需要做的就是转换一列的数据类型。
**备注:**最初该列是具有一个十进制的浮点数类型(例如: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!
如果需要更改单个列的数据类型,则更容易直接处理该列:
df['my_col'] = df['my_col'].astype(int)
或使用。分配
:
df = df.assign(my_col=lambda d: d['my_col'].astype(int))
如果您只需要转换一次,并且不想在该范围之外更改您的
df
,则。
另一种方法是禁用链式分配,它可以在代码上运行,而不需要创建副本:
# disable chained assignments
pd.options.mode.chained_assignment = None
我认为需要复制
并省略选择列的loc
:
df = df[df['my_col'].notnull()].copy()
df['my_col'] = df['my_col'].astype(int).astype(str)
说明:
如果稍后修改df
中的值,您将发现修改不会传播回原始数据(df
),并且不会发出警告。
问题内容: Jupiter Nootbook返回此警告: 请参阅文档中的警告:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus- copy 请参阅文档中的警告:http : //pandas.pydata.org/pandas-docs/stable/indexing.html#inde
问题内容: 我有一个小数据框,说这个: 我想要column的滚动平均值,所以我这样做: 它的工作方式如下:我有一个新的列,该列包含我希望包含的内容,但我也收到警告消息: 试图在DataFrame的切片副本上设置一个值。尝试改用.loc [row_indexer,col_indexer] = value 请参阅文档中的警告:http : //pandas.pydata.org/pandas-docs
运行以下代码时: 我得到以下警告: 正在尝试在DataFrame的切片副本上设置值。尝试使用. loc[row_indexer,col_indexer]=value来代替查看留档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy 但这正是我想要的行为(真实的表非常大,我不想
问题内容: 这个问题已经被问了很多遍了,而且似乎对其他人也有用,但是,当我从不同的DataFrame复制列(并且长度相同)时,我得到了值。 我需要这样 我尝试了以下方法 我得到以下内容 问题答案: 您的DataFrames的索引是不同的 (相应地,每列 的索引也不同 ),因此,当尝试将一个DataFrame的列分配给另一列时, pandas会尝试对齐索引,但这样做会失败,请插入NaN。 考虑以下示
我的屏幕上有一个按钮,我需要在单击按钮时传递布尔值。 在这里,当点击按钮时,它会启动一个片段并打开另一个屏幕,我只需要显示一个按钮。 同样,如果我从另一个片段导航,那么同一个按钮需要显示所有屏幕视图。 我可以沿着这个发送一个布尔值吗?它将如何在另一个片段中检索?
最后,这里是Fragment类