【问题标题】:SettingWithCopyWarning caused by boolean slicing [duplicate]由布尔切片引起的 SettingWithCopyWarning [重复]
【发布时间】:2021-10-22 00:48:15
【问题描述】:

如果您按标签(注释行)切片,警告就会消失,而我对警告的所有阅读都无法解释为什么会有任何不同。我需要按一个布尔数组进行切片,那么我应该怎么做(除了忽略警告)?

import pandas as pd

x = pd.DataFrame({'A': [0, 1], 'B': [0, 1]})
y = x.loc[[True, False], :]
# y = x.loc[[0], :]
y.loc[:, 'A'] = 1

【问题讨论】:

  • 这是一个已知问题。 locNo SettingWithCopyWarning for chained indexing when .loc or .iloc is first indexer 的行为有很多不一致之处,这也延伸到了副本或视图的产生。
  • @HenryEcker 自 2017 年以来就为人所知,甚至没有公关......这太可怕了。
  • 一点。然而,在许多方面做“正确”的事情可以避免所有这些问题。副本应始终使用copy 明确,并且应始终使用lociloc 在分配时完成子集化。问题是不一致的地方让我们很难弄清楚为什么事情会以这种方式发生。我将用一些重复来结束这个问题,这样它就可以作为其他人需要更多关于警告的信息以及如何解决它的更多细节的路标。

标签: python pandas


【解决方案1】:

从您的切片中添加.copy

y = x.loc[[True, False], :].copy()
y
   A  B
0  0  0

【讨论】:

  • 复制开销不是很大吗?我的布尔数组通常都是真的,在这种情况下警告已经不会发生。
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 2021-01-19
  • 2017-02-27
  • 2017-04-04
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多