提问人:thefrollickingnerd 提问时间:3/1/2022 更新时间:3/1/2022 访问量:29
如果满足 3 列中的条件,则将整行更改为 nan
Change entire row to nan if condition in 3 columns met
问:
我有一个数据框,其中包含 400 列频率数据和 3 列,其中包含泵 1 -> 3 是“正在运行”还是“停止”。
我想将整行更改为满足泵条件的 nan。(这是否会改变泵行并不重要,因为我在此之后删除了这些列)
例如,我试过
df[(df["Pump Set 1"] != "STOPPED") & (df["Pump Set 2"] != "STOPPED") & (df["Pump Set 3"] != "STOPPED")] = None
当我这样做并打印 df.head() 时,我看不到任何变化,但如果我尝试并
df = df[etc
我收到 none 类型错误。 我在网上看到的所有其他示例都需要指定要更改的列,我不想指定 400 列。
答:
2赞
jezrael
3/1/2022
#1
您可以将 DataFrame.loc
用于所有列::
mask = (df["Pump Set 1"] != "STOPPED") &
(df["Pump Set 2"] != "STOPPED") &
(df["Pump Set 3"] != "STOPPED")
df.loc[mask, :] = None
或者传递所有列:
df.loc[mask, df.columns] = None
评论
0赞
thefrollickingnerd
3/1/2022
它运行没有错误,但输出是未更改的数据帧,请注意,它只适用于一个条件,似乎不适用于所有三个条件
0赞
jezrael
3/1/2022
@thefrollickingnerd - 一个想法,如果检查是预期的?print (mask)
Trues
0赞
thefrollickingnerd
3/1/2022
掩码似乎按预期工作,但 & 似乎不是排他性的。它似乎基本上充当 or 函数。哦,我需要使用不同的运算符
0赞
jezrael
3/1/2022
@thefrollickingnerd - 我问是因为也许如果单独检查,应该有一些像 .因此,如果检查,然后可以验证是否都按预期工作STOPPED
print ((df["Pump Set 1"] != "STOPPED"))
print ((df["Pump Set 2"] != "STOPPED"))
print ((df["Pump Set 3"] != "STOPPED"))
1赞
thefrollickingnerd
3/1/2022
为了便于后代,我将 != 更改为 ==,以便它能找到所有泵都关闭的所有行(我想保留的内容),然后在 df.loc 语句 -> df.loc[~mask, df.columns] 中反转该掩码。
上一个:想要将数组的元素连接成单个元素
评论
df[(df["Pump Set 1"] != "STOPPED") & (df["Pump Set 2"] != "STOPPED") & (df["Pump Set 3"] != "STOPPED")]