当前位置: 首页 > 面试题库 >

在Pandas中分配列时处理SettingWithCopyWarning [重复]

梁新觉
2023-03-14
问题内容

这个问题已经在这里有了答案

如何在熊猫中处理SettingWithCopyWarning (15个答案)

1年前关闭。

我有一个DataFrame要扩展的列,其中包含上一行的数据。

此脚本可以完成以下任务:

#!/usr/bin/env python3

import numpy as np
import pandas as pd

n = 2

df = pd.DataFrame({'A': [1,2,3,4,5], 'B': [0,1,1,0,0]}, columns=['A', 'B'])

df2 = df[df['B'] == 0]
print(df2)

for i in range(1, n+1):
    df2['A_%d' % i] = df2['A'].shift(i)

print(df2)

它输出:

   A  B
0  1  0
3  4  0
4  5  0

   A  B  A_1  A_2
0  1  0  NaN  NaN
3  4  0  1.0  NaN
4  5  0  4.0  1.0

这正是我想要的。在DataFrame现在有两个附加列A_1A_2包含列的值A 12 之前的行。

但是,我也得到警告:

./my_script.py:14: SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy
  df2['A_%d' % i] = df2['A'].shift(i)

问题肯定来自我创建之前的过滤df2。如果我df直接工作,则不会发生此问题。在我的应用程序中,我需要分别处理原始DataFrame的多个部分,因此绝对需要进行过滤。df2稍后将所有不同部分(如此处)连接起来。

我在如何处理Pandas中的SettingWithCopyWarning中发现了类似的问题?和Pandas
SettingWithCopyWarning,
但那里的解决方案无法解决问题。

写作例如

df2[:, 'A_%d' % i] = df2['A'].shift(i)

仍然出现相同的警告。

我正在使用Python 3.5.2和Pandas 0.19.2


问题答案:

我认为您需要copy

df2 = df[df['B'] == 0].copy()

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



 类似资料:
  • 问题内容: 背景 我刚刚将熊猫从0.11升级到0.13.0rc1。现在,该应用程序会弹出许多新警告。其中之一是这样的: 我想知道这到底是什么意思?我需要改变什么吗? 如果我坚持使用该如何警告quote_df[‘TVol’] = quote_df[‘TVol’]/TVOL_SCALE? 产生错误的功能 更多错误讯息 问题答案: 在SettingWithCopyWarning被创造的标志可能造成混淆的

  • 问题内容: 背景 我刚刚将Pandas从0.11升级到0.13.0rc1。现在,该应用程序弹出许多新警告。其中之一是这样的: 我想知道到底是什么意思?我需要改变什么吗? 如果我坚持使用该如何警告 产生错误的函数 更多错误讯息 问题答案: 在被创造的标志可能造成混淆的“链接”的任务,比如下面这并不总是如预期的工作,特别是当第一选择返回一个副本。[ 有关背景讨论,请参见GH5390和GH5597。]

  • 问题内容: 我有一个DataFrame,其中的一列包含每行的标签(除了每行的一些相关数据)。我有一本字典,其键等于可能的标签,而值等于与该标签相关的信息的2元组。我想在框架上添加两个新列,每个对应于标签的2元组的每一部分。 这是设置: 我可以通过运行获得想要的东西: 但是,如果我不想手动在作业左侧键入两列,该怎么办?即,如何动态创建多个新列。例如,如果我有10个元组而不是2个元组,那么这将是当前所

  • 我想知道它到底是什么意思?我需要改变什么吗? 如果坚持使用,应如何挂起警告?

  • 问题内容: 我正在设置2D数组中多个元素的值,但是我的数据有时包含给定索引的多个值。 似乎总是分配了“更高”的值(请参见下面的示例),但是是否可以保证此行为,或者是否有机会获得不一致的结果?我怎么知道我可以按照我在矢量化分配中想要的方式来解释“稍后”? 也就是说,在我的第一个示例中,肯定会始终包含该内容,而在第二个示例中,它将打印吗? 很简单的例子: 另一个例子 问题答案: 在NumPy 1.9和

  • 我有以下API调用 失败是因为 现在我明白了,我必须多次调用以删除Cloud watch的Insight规则,每20个块。 所以从概念上来说,我在寻找 现在,我在java 8 streams api中找不到任何允许我将列表分块处理的东西。有点像scala分组功能将列表拆分为多个元素数目固定的列表。 有人能帮我解决这个问题吗?谢谢当然,我可以使用命令式样式和子列表,但如果可以的话,我宁愿避免这样做。