小编典典

修改 pandas 数据框中的行子集

all

假设我有一个带有两列 A 和 B 的 pandas DataFrame。我想修改这个 DataFrame(或创建一个副本),以便在 A 为 0 时 B
始终为 NaN。我将如何实现?

我尝试了以下

df['A'==0]['B'] = np.nan

df['A'==0]['B'].values.fill(np.nan)

没有成功。


阅读 62

收藏
2022-08-01

共1个答案

小编典典

用于.loc基于标签的索引:

df.loc[df.A==0, 'B'] = np.nan

df.A==0表达式创建一个布尔系列,索引行,'B'选择列。您还可以使用它来转换列的子集,例如:

df.loc[df.A==0, 'B'] = df.loc[df.A==0, 'B'] / 2

我对 pandas 的内部结构了解得不够多,无法确切知道为什么会这样,但基本问题是有时索引到 DataFrame
会返回结果的副本,有时会返回原始对象的视图。根据此处的文档,此行为取决于底层的 numpy
行为。我发现在一次操作中访问所有内容(而不是 [one][two])更有可能用于设置。

2022-08-01