问题标签 [chained-assignment]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
20008 浏览

python - Pandas:知道操作何时影响原始数据帧

我喜欢 pandas 并且多年来一直在使用它,并且非常有信心我可以很好地处理如何对数据帧进行子集化以及适当地处理视图与副本(尽管我使用了很多断言来确定)。我也知道有很多关于 SettingWithCopyWarning 的问题,例如如何处理 Pandas 中的 SettingWithCopyWarning? 以及一些关于在它发生时绕开你的头的最新指南,例如了解 Pandas 中的 SettingWithCopyWarning

但我也知道具体的事情,比如这个答案中的引用不再出现在最新的文档0.22.0

.iloc最近,在教 pandas 让新手完成关于避免链式索引(和使用/ )等非常基本的 Python 知识之后.loc,我仍然很难提供一般的经验法则来了解何时需要注意SettingWithCopyWarning(例如,何时忽略它是安全的)。

我个人发现,根据某些规则(例如切片或布尔操作)对数据框进行子集化,然后独立于原始数据框修改该子集的特定模式是比文档建议的更常见的操作。在这种情况下,我们想要修改副本而不是原始版本,并且警告对新手来说是令人困惑/害怕的。

我知道提前知道何时返回视图与副本并非易事,例如
,Pandas 使用什么规则来生成视图与副本?
在 Pandas 中检查数据框是复制还是查看

因此,我正在寻找更一般(初学者友好)问题的答案:对子集数据帧执行操作何时会影响创建它的原始数据帧,它们何时独立?.

我在下面创建了一些我认为合理的案例,但我不确定我是否遗漏了“陷阱”,或者是否有更简单的方法来思考/检查这一点。我希望有人可以确认我对以下用例的直觉与我上面的问题有关。

1) 警告:无
原件更改:无

2)警告:是(我不太明白为什么)
原来的变化:否

3)警告:是
原始更改:否

4) 警告:无
原件更改:无

5) 警告:否
原件更改:是(让新手感到困惑,但有道理)

tl;dr 从原始数据帧创建新数据帧时,更改新数据帧:当使用 .loc/.iloc 的标量/切片索引创建新数据帧
时,将更改原始数据帧。使用 .loc进行布尔索引时 不会更改原始索引,或用于创建新数据帧
.query().copy()

0 投票
1 回答
205 浏览

chained-assignment - java中可能有多少链式赋值?

例如

那么,在java中可以实现多长时间......

0 投票
1 回答
696 浏览

python - 使用多索引在 pandas DataFrame 上设置值

以下是我正在尝试做的一个最小示例。我有一个带有多索引的熊猫数据框,如下所示

所以我拥有的DataFrame是

我想要的是将索引“秒”等于二的所有观察值设置为-1。我想到的是使用.loc,如下所示:

但 .loc 不接受“:”运算符。

有人可以在这里帮忙吗?

0 投票
1 回答
23 浏览

python - pandas 设置部分数据并获取 SettingWithCopyWarning

我试图将部分数据设置为 -1,但我得到一个SettingWithCopyWarning.

我试图找到 StackOverflow,但很多答案都使用 loc 来解决。

数据来自 Kaggle Titanic。

0 投票
1 回答
156 浏览

python - 接收 SettingWithCopyWarning。继续进行是否安全?

我正在尝试用仅包含方法中字符串的行替换'let'DataFrame 中的列london(它是 another 的副本) 。代码如下:no_ecocontains()

代码有效,我已经删除了不满足字符串的行,但是我收到以下警告:

在查看文档时,我仍然无法理解我做错了什么。

可以继续使用变量london还是我将来会遇到问题?

谢谢。

0 投票
1 回答
84 浏览

python - 我绕过了 SettingWithCopyWarning,感觉像是错误的方式并且计算效率低下,有没有更好的方法?

SettingWithCopyWarning在尝试更改 DataFrame 中的某些值时,我遇到了常见的情况。我找到了一种方法来解决这个问题而不必禁用警告,但我觉得我做错了,而且它是不必要的浪费和计算效率低下。

这就是它的设置方式,如果我这样做,我会收到警告:

如果我这样做:

我通过这样做解决了它:

这也有效:

但即便如此,额外的 DataFrame 创建也会让人觉得过于笨拙。

为什么我不能以某种方式分配列?或者使用一些替换方法的安排?该文档似乎没有解决方案,还是我只是读错了?缺少一些明显但未详细说明的解决方案?

有没有更好的方法来做到这一点?

0 投票
0 回答
40 浏览

python - 意外的 SettingWithCopyWarning:

我正在运行修改数据框中某个阈值内的值的代码。我收到一条警告,从表面上看似乎没有必要:

我的代码已经使用了 a.loc[row,column]赋值,因此我不明白警告为什么会这样。

我无法解释的另一种行为是,当我使用警告选项时,一旦我将警告设置为None,即使我将其重置为"warn",也不再有警告。注意:我的代码用作函数。


编辑

顶部的链接中提供了代码功能的描述以及示例;但是,我在这里的重点是理解为什么警告会建议已经实现的实现:Pandas - Calculate New Value Based on Cross Reference with another Column

0 投票
1 回答
3117 浏览

python - 类型提示和链式赋值以及多重赋值

我想这两个问题是相关的,所以我将它们一起发布:

1.- 是否可以在链式分配中加入类型提示?

这两次尝试都失败了:

2.- 是否可以在多个作业中放置类型提示?

这些是我的尝试:

我知道在这两种情况下,类型都是从 a 的类型提示中推断出来的,但是我有一个很长的变量列表(在__init__一个类中),我想更加明确。

我正在使用 Python 3.6.8。

0 投票
0 回答
835 浏览

python-3.x - 使用方法转换列数据时避免“SettingwithCopyWarning”

我正在处理一些数据,我试图使用不重置值的方法将整个列转换为不同的格式(即从对象到日期时间或从对象到数字)。下面的每一行代码都会返回“SettingwithCopyWarning”错误:

如果我留下上述任何一行,则会导致错误。如果我将它们全部取出,代码不会引发任何警告。

经过一些研究,我了解到使用链式分配时会出现“SettingwithCopyWarning”,并且视图是数据框的副本,而不是数据框本身,(参考:https ://www.dataquest.io/blog/settingwithcopywarning / )。

我还了解到,避免链式分配的一般形式是df.loc[<mask or index label values>, <optional column>] = < new scalar value or array like>(参考:python pandas:如何避免链式分配)。

我试图像这样争论一些东西只是为了测试表格:

但它返回一个错误,如:

这让我觉得我试图把它塞进去的一般形式是把它当作字典混淆并引发 KeyError。

环顾四周后,我不确定如何将其应用于使用方法(点函数)而不使用链式分配的整个列(如我的代码)。

有没有解决的办法?

编辑:

给定代码上方的行:

0 投票
0 回答
117 浏览

python - python panda链式赋值的替代方法是什么

我正在尝试将新列添加到新的 excel 中,并使用熊猫链式分配添加到现有列中。但这太慢了,内存消耗很高,显示低于警告

为了更好的解释

我想知道这个实现还有其他选择吗?如果是这样,请分享您的方法提前谢谢

#UPDATE 假设这个源excel数据

基于 sql 查询,我将得到 col AAA 的一些结果为 1,类似地,DDD 将得到 2。所以我需要形成一个最终的 excel,如下所示

我需要传递 COL1 和 COL2 的值来获取查询结果。这就是为什么我使用这个循环。希望你有清晰的想法