当前位置: 首页 > 知识库问答 >
问题:

使用CopyWarning[重复]进行设置

子车成和
2023-03-14

Python 3.4和Pandas 0.15.0

df是一个数据帧,col1是一列。使用下面的代码,我正在检查值10的存在,并将这些值替换为1000。

df.col1[df.col1 == 10] = 1000

这是另一个例子。这一次,我将根据索引更改col2中的值。

df.col2[df.index == 151] = 500

这两种情况都会产生以下警告:

-c:1: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

最后

cols = ['col1', 'col2', 'col3']
df[cols] = df[cols].applymap(some_function)

这将产生一个类似的警告,并附带一个建议:

Try using .loc[row_indexer,col_indexer] = value instead

我不确定我是否理解警告中指出的讨论。编写这三行代码的更好方法是什么?

请注意,这些操作是有效的。

共有2个答案

元英朗
2023-03-14

同意Paul关于“loc”用法的意见。

对于applymap案例,您应该能够执行以下操作:

cols = ['col1', 'col2', 'col3']
df.loc[:, cols] = df[cols].applymap(some_function)
饶元章
2023-03-14

这里的问题是:df.col1[df.col1==10]返回一个副本。

所以我想说:

row_index = df.col1 == 10
# then with the form .loc[row_indexer,col_indexer]
df.loc[row_index, 'col1'] = 100
 类似资料:
  • 对使用. locs进行索引/切片的赋值有一个一般性问题。 假设以下数据帧df: 要复制的代码: 我创建df1使用: 然后,我根据B中的值,使用以下公式为C赋值: 作业正常工作,但我收到一个SettingBackCopy警告。是我做错了什么,还是这是预期的功能?我认为使用. loc可以避免链式赋值。是不是我错过了什么?我正在使用熊猫14.1

  • 我已经阅读了一些关于如何模拟或模拟HttpClient的文档,但是我不能成功地为我的单元测试复制。到目前为止,我还不能接口HttpClient,所以我选择注入HttpMessageHandler,其想法是设置它,以便返回对客户机的任何调用的响应。

  • 我试图操纵一个数据帧,它是从Sci Kit Learn的train_test_split操作中收到的。系统提供了以下信息: /usr/local/lib/python3.6/site packages/pandas/core/index.py:179:SettingWithCopyWarning:试图在数据帧中的切片副本上设置值 以下内容会在我的系统上引发警告: 我使用以下版本: python:'

  • 我遇到的一个问题是水平导航栏。我已经使用flexbox实现了它。 我有一个导航条,当我缩小它时,列表项(有黑色边框)不会停留在无序列表容器中(有紫色边框) 根据我对每个flex box的理解,应该使用flex属性在父容器中调整大小。但是在我的例子中,列表项不会在无序列表容器中调整大小。以下是正在发生的事情的图片: 这是我的html代码:

  • 我试图在压模上的单个pdf中添加多个签名。我可以添加多个母模。在我的一个案例中,我得到了错误 至少有一个签名无效。还需要使所有签名有效。 我想在一个PDF中添加多个有效符号。请帮帮我。在图中,只有一个符号是有效的,其他符号是无效的,所以让我看看我做错了什么 下面是我的代码快照