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

为什么我得到一个设置用拷贝警告一个值是试图被设置在一个片的副本?

萧丁雨
2023-03-14

运行以下代码时:

import pandas as pd
df = pd.DataFrame({"A": [1,2,3],"B": [2,4,8]})
df2 = df[df["A"] < 3]
df2["C"] = 100

我得到以下警告:

正在尝试在DataFrame的切片副本上设置值。尝试使用. loc[row_indexer,col_indexer]=value来代替查看留档中的警告:http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

但这正是我想要的行为(真实的表非常大,我不想复制它),为什么我会收到警告?为什么有风险?

df

   A  B
0  1  2
1  2  4
2  3  8

df2

   A  B    C
0  1  2  100
1  2  4  100

共有1个答案

孟树
2023-03-14

为什么会发生这种情况?

因为df2df片段的副本。

为什么有风险?

这条消息告诉您,df2df是不同的东西。之所以采用这种方法,是因为它们并不总是显而易见的。

以文档中的示例代码为例:

def do_something(df):
   foo = df[['bar', 'baz']]  # Is foo a view? A copy? Nobody knows!
   # ... many lines here ...
   foo['quux'] = value       # We don't know whether this will modify df or not!
   return foo

我如何解决它?

通过显式复制切片:

df2 = df[df['A'] < 3].copy()
df2['C'] = 100

或者使用loc

df.loc[df['A'] < 3, 'C'] = 100
 类似资料:
  • 我知道有很多关于这个警告的帖子,但是我找不到解决我的问题的办法。这是我的密码: 它产生警告: SettingWithCopyWarning:试图在数据帧切片的副本上设置值。尝试改用.loc[row\u indexer,col\u indexer]=value 即使我按照建议更改了代码,我仍然收到此警告?我所需要做的就是转换一列的数据类型。 **备注:**最初该列是具有一个十进制的浮点数类型(例如:

  • 问题内容: 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

  • 我得到的错误的情况下,我不会期望他们: 和 为什么会发生在案例1和2中?

  • 关于Spring bean配置,我有两个主要问题:1。当我从应用程序上下文检索bean时,我通过属性文件读取的属性并不持久化。2.我很难弄清楚如何将bean的值设置为另一个bean-在下面的示例中,我试图将Plan bean的度量属性设置为某个bean。 我有两个小班,一个度量,和一个更大的计划: 但是当我尝试访问这个bean时,我在主应用程序中得到了默认值或空值,这表明这些属性没有持久化:

  • 我正在使用Ehcache 3 我有一个缓存用于存储一种类型的对象,另一个缓存用于不同类型的对象。这些在不同的类中,每个都有自己的缓存管理器。 但是我现在想知道我是否误解了这些示例,让一个CacheManager管理两个不同的缓存更有意义,或者你只是想使用同一个CacheManager来管理同一类型的多个缓存。 因为示例喜欢将代码链接在一起,所以从留档中很难看出正确的方法是什么。

  • 我想立即使用jQuery来完成这个任务。