熊猫过滤基于空数据中布尔列的列

时间:2020-05-22 09:50:35

标签: python pandas dataframe slice

我今天发现了一种以前从未注意到的怪异行为,我想知道你们中的任何人是否可能已经看到这种情况,并知道发生这种情况的原因(或者听起来像是一个错误)。

我有一种方法可以对数据框进行一些计算,其中之一就是典型的切片方法,您可以根据布尔选择在数据框中选择那些记录

df['selected'] = df.groupby('groupkey')['field1'].transform(
    lambda x: x.isna().all()
)

为此,我添加了一个新列,该列根据每组中的所有条目是否都是nan来告诉我是否要选择groupkey的每组。

然后根据此列的内容过滤

new_df = df[df['selected']]

这很好(不确定是否有更好的方法可以这样做),但是在某些情况下它不能很好地工作。如果原始数据框为空。如果为空,我希望选择为空,但是由于某种原因,数据框上的所有信息都丢失了,这些列消失了,所以以后我将无法访问它们。该过滤器返回一个包含0列的视图。

最奇怪的是,如果我这样选择它

new_df = df[df['selected'].isna()]

然后,new_df为空,但保留列。 selected列中的isna毫无意义,但以某种方式对其进行了修复。

在执行任何上述操作之前,我可以检查数据框是否为空,然后继续进行下去,但是我发现这很奇怪,在我修改此部分之前,无论数据框是否为空,整个方法都可以正常工作。

您以前有没有看过这本书,并且知道为什么将列从生成的视图中删除吗?

谢谢!

0 个答案:

没有答案