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

使用iloc时熊猫设置WithCopyWarning

轩辕风华
2023-03-14

我试图在将数据帧与另一个数据帧合并后更改数据帧中的值,并遇到一些问题(在合并之前似乎不是问题)。

我正在索引和更改数据帧中的值:

df.iloc[0]['column'] = 1

随后,我使用merge连接了两个索引(左外连接)(我意识到left.join(右)也可以)。此后,当我使用iloc执行相同的值分配时,我收到以下警告:

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

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

对链接文档的审查不会澄清理解,因此,我是否使用了错误的iloc切片方法?(请记住,出于代码的目的,我需要基于位置的切片。)

我注意到df.ix[0,'列'] = 1工作,同样基于此页面,我可以引用df.columns.get_loc(“列”)的列位置,但从表面上看,这似乎不必要地复杂化了。

这些方法之间有什么区别,合并会导致以前的方法(df.iloc[0]['列'])中断?

共有2个答案

彭炳
2023-03-14

这很糟糕,但是目前为止我得到的最好的解决方案是基于。ilocs是找到一列的iloc,然后使用。万能的iloc:

column_i_loc=np.where(df.columns=='列')[0][0]df.iloc[0,column_i_loc]=1

注意,您也可以禁用警告,但不要这样做!...

此外,如果您遇到此警告,并且没有尝试更新某些原始数据帧,那么您忘记了复制,并最终出现了一个严重的错误。。。

国斌斌
2023-03-14

您正在使用上面的链式索引,这是要避免的“df.iloc[0]['列'] = 1”,并生成您收到的设置与Copy警告。Pandas文档有点复杂,但请参阅设置与带有链接索引的Copy警告,了解为什么这不起作用的解释。

相反,您应该使用<code>df。loc[0,column]=1

.loc 用于“通过标签或布尔数组访问一组行和列”。

<代码>。iloc用于“基于位置选择的纯整数位置索引”

 类似资料:
  • 假设我有下面的数据框,我想将

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

  • 试图弄清楚为什么下面的函数返回可怕的...这是我的函数,它打算通过引用修改数据框。 不符合要求的行是

  • 问题内容: 我有两列,将集存储在数据框中。 我想使用快速向量化操作在两列上执行集合并集 但是错误使我无法这样做,因为我在两列中都输入了内容。 有解决这个问题的好方法吗? 问题答案: 对于这些操作,纯Python可能更有效。 如果我们可以使用,则可能会花费一半的时间(继承可能不值得): 时序的DataFrame:

  • 问题内容: 假设我用两列(一个DateTime)和一个(整数)创建了一个熊猫DataFrame 。现在,我想根据第一列()中的值创建一个DatetimeIndex : 一切似乎都正常,除了我打印DataFrame时,它说它具有Int64Index。 我是在做错事还是不正确理解Indeces的概念? 问题答案: 没有就位(除非您通过)。否则一切正确 同样作为参考,在即将到来的0.12版本(下周)中,

  • 我想用替换大于任意数字(本例中为100)的