【问题标题】:How to change specific cell values in a pandas dataframe column series based on multiple conditions? [duplicate]如何根据多个条件更改熊猫数据框列系列中的特定单元格值? [复制]
【发布时间】:2017-04-01 19:12:11
【问题描述】:

我正在尝试替换所有值在 pandas 数据框列 df.column_A如果它们在 1 到 10 的范围内

但是,当我这样做时:

df.loc[(1 < df.column_A < 10), "Column_A"] = 1

生产:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()

或者,当我这样做时:

df.loc[(df.column_A < 10) & (df.column_A > 1), "df.column_A"] = 1

我根本没有收到错误,但值没有被替换。

奇怪的是,当我这样做时:

df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1

正如我所料,df.column_A 中的所有值都将替换为 1

这表示该行的语法是正确的,所以错误一定是由于一些我不明白的因素造成的。

我做错了什么?

【问题讨论】:

    标签: python pandas dataframe multiple-conditions pandas-loc


    【解决方案1】:

    这是一个简单的问题。 .loc 采用索引标签或布尔列表/系列。所以这会起作用:

    df.loc[(df.column_A < 10) & (df.column_A > 1), "column_A"] = 1
    

    请注意,我从列索引位置删除了df.


    df.loc[(1 < df.column_A < 10), "Column_A"] = 1
    

    不会起作用,因为(1 &lt; df.column_A &lt; 10) 操作看起来合乎逻辑,但它试图将整个系列折叠成一个值。由于它不知道您是否需要 andor 或其他组合,因此会引发该错误。

    df.loc[(df.column_A < 10) | (df.column_A > 1), "df.column_A"] = 1
    

    也不应该工作,因为您没有正确引用列。有趣的是,您没有收到任何错误。也许你之前在你的程序中做了一些可以节省你的事情......

    【讨论】:

      猜你喜欢
      • 2023-02-21
      • 2021-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-02
      • 1970-01-01
      • 1970-01-01
      • 2021-06-07
      相关资源
      最近更新 更多