gpt4 book ai didi

python - bool 选择和屏蔽赋值

转载 作者:太空宇宙 更新时间:2023-11-04 00:19:48 24 4
gpt4 key购买 nike

关于 DataFrame 中的 bool 选择的新手 pandas 问题。假设我有以下内容,我想在其中获取所有 > 1 的条目并将它们设置为 3

import numpy as np
import pandas as pd

s = pd.DataFrame(data=np.random.randn(10, 4), index=np.arange(10),
columns=["a", "b", "c", "d"])

s[np.abs(s) > 1] = np.sign(s) * 3

RHS 的形状与 LHS 不同,为什么它工作正常而我不必这样做

s[np.abs(s) > 1] = np.sign(s[np.abs(s) > 1]) * 3

我的理解是,这两个表达式的 LHS 返回对括号中的表达式求值为 True 的元素的 View 。但是,检查第一条语句的 LHS 表明它为选择语句为 False 的元素返回 NaN。我错过了什么?

最佳答案

您缺少的是 Python 中的索引语句根据它是在赋值的 RHS 还是 LHS 上而具有不同的含义。在你的情况下:

s[np.abs(s) > 1] = np.sign(s) * 3

这会调用 pd.DataFrame.__setitem__(s, np.abs(s) > 1, np.sign(s) * 3)。由于np.abs(s) > 1仅在某些单元格中返回 True,Pandas 实现setitem()` 以仅修改这些单元格。这只是一个有用的约定——Python 语言本身没有强制执行它。

另一方面,如果你说:

print(s[np.abs(s) > 1])

这会调用 pd.DataFrame.__getitem__(s, np.abs(s) > 1)。 Pandas 通过返回一个与 s 形状相同但“缺失”值用 NAN 填充的 DataFrame 来实现这一点。

因此,当您进行赋值时,不要想象 Pandas 正在创建一个条件为 False 且具有 NAN 值的 DataFrame,然后赋值给该 DataFrame。事实并非如此。只要条件为真,它就会将值从 RHS 复制到 LHS。

关于python - bool 选择和屏蔽赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49583609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com