删除pandas数据框列中包含"False"的行

Yol*_*ken 9 python boolean dataframe pandas

我认为这是一个简单的解决方案,我不确定我缺少什么.我有这样一个数据框:

         index               c1       c2         c3
2015-03-07 01:27:05        False    False       True   
2015-03-07 01:27:10        False    False       True   
2015-03-07 01:27:15        False    False       False   
2015-03-07 01:27:20        False    False       True   
2015-03-07 01:27:25        False    False       False   
2015-03-07 01:27:30        False    False       True   
Run Code Online (Sandbox Code Playgroud)

我想删除包含任何行,Falsec3.c3是一个dtype=bool.我一直遇到问题,因为它是一个布尔值而不是字符串/ int/etc,我之前没有处理过.

谢谢你的帮助!

ASG*_*SGM 27

熊猫以非常简洁明了的方式处理布尔值:

df = df[df.c3]
Run Code Online (Sandbox Code Playgroud)

当您使用过滤数据帧时df[...],通常会编写一些返回布尔值的函数(如df.x > 2).但是在这种情况下,由于列已经是一个布尔值,你可以df.c3自己放入,这将获得所有的行True.

如果你想得到相反的结果(正如你暗示的问题的原始标题),你可以使用df[~df.c3],~反转布尔值.

有关Pandas中布尔索引的更多信息,请参阅文档.

  • 不确定,但这可能存在创建副本的问题 - 也许 `df = df.loc[df.c3, :]` 对于大数据帧会更快? (2认同)

Dee*_*ace 7

问题的标题和问题本身恰恰相反,但是:

df = df[df['c3'] == True]  # df will have only rows with True in c3
Run Code Online (Sandbox Code Playgroud)


piR*_*red 7

解决方案

df.drop(df[df['c3'] == False].index, inplace=True)
Run Code Online (Sandbox Code Playgroud)

这明确地滴行,其中'c3'False不只是保持行评估为True


Acu*_*nus 5

考虑DataFrame.query。这允许链式操作,从而避免通过变量名称引用数据帧。

filtered_df = df.query('my_col')
Run Code Online (Sandbox Code Playgroud)

这应该返回my_col计算结果为 true 的行。要反转结果,请使用query('~my_col')。

要就地执行此操作:

df.query('my_col', inplace=True)
Run Code Online (Sandbox Code Playgroud)