Python 两个选择都产生相同的结果,但有一个选择我不能给数据帧赋值 请考虑这个例子: import numpy as np import pandas as pd df = pd.DataFrame([1,2,3,4,5], columns=["col"]) df[df["col"] == 3]["col"] = 11 # Does not work. df["col"][df["col"] == 3] = 55 # Does work!

Python 两个选择都产生相同的结果,但有一个选择我不能给数据帧赋值 请考虑这个例子: import numpy as np import pandas as pd df = pd.DataFrame([1,2,3,4,5], columns=["col"]) df[df["col"] == 3]["col"] = 11 # Does not work. df["col"][df["col"] == 3] = 55 # Does work!,python,numpy,pandas,variable-assignment,Python,Numpy,Pandas,Variable Assignment,虽然赋值结果不同,但基本选择产生相同的结果: df[df["col"] == 3]["col"] # Looks like the same as df["col"][df["col"] == 3] # this 为什么一种方法有效而另一种方法无效?您可能应该阅读这些文档。@DSM谢谢,我理解其中的差异,并发现两种选择都不相同;这可以使用is操作符进行比较来确认。但是有一个简单的规则吗?在这一点上,文档看起来相当复杂。以下语句在多大程度上适用于一个select而不适用于另一个select?“每

虽然赋值结果不同,但基本选择产生相同的结果:

df[df["col"] == 3]["col"] # Looks like the same as
df["col"][df["col"] == 3] # this

为什么一种方法有效而另一种方法无效?

您可能应该阅读这些文档。@DSM谢谢,我理解其中的差异,并发现两种选择都不相同;这可以使用
is
操作符进行比较来确认。但是有一个简单的规则吗?在这一点上,文档看起来相当复杂。以下语句在多大程度上适用于一个select而不适用于另一个select?“每当索引操作涉及到标签数组或布尔向量时,结果将是一个副本。”在这两个版本中,
df[“col”]==3
都是用于选择的布尔向量,但在前一个版本中,先使用条件;在后一种情况下,首先选择序列。@Tobias他们的规则并不简单;我能告诉你的最好的一点是,如果整个帧是一个数据类型,那么它应该对这两种类型都同样有效;但是,这正是我们不建议使用链式索引的原因,因为如果添加一个字符串列,它可能会突然停止工作相关的答案:@Tobias使用多轴索引器进行选择,例如,
df.loc['col',df['col']==3]
(并以相同的方式分配)