假设我有一个带有两列 A 和 B 的 pandas DataFrame。我想修改这个 DataFrame(或创建一个副本),以便在 A 为 0 时 B 始终为 NaN。我将如何实现?
我尝试了以下
df['A'==0]['B'] = np.nan
和
df['A'==0]['B'].values.fill(np.nan)
没有成功。
用于.loc基于标签的索引:
.loc
df.loc[df.A==0, 'B'] = np.nan
该df.A==0表达式创建一个布尔系列,索引行,'B'选择列。您还可以使用它来转换列的子集,例如:
df.A==0
'B'
df.loc[df.A==0, 'B'] = df.loc[df.A==0, 'B'] / 2
我对 pandas 的内部结构了解得不够多,无法确切知道为什么会这样,但基本问题是有时索引到 DataFrame 会返回结果的副本,有时会返回原始对象的视图。根据此处的文档,此行为取决于底层的 numpy 行为。我发现在一次操作中访问所有内容(而不是 [one][two])更有可能用于设置。