我今天发现了一种以前从未注意到的怪异行为,我想知道你们中的任何人是否可能已经看到这种情况,并知道发生这种情况的原因(或者听起来像是一个错误)。
我有一种方法可以对数据框进行一些计算,其中之一就是典型的切片方法,您可以根据布尔选择在数据框中选择那些记录
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毫无意义,但以某种方式对其进行了修复。
在执行任何上述操作之前,我可以检查数据框是否为空,然后继续进行下去,但是我发现这很奇怪,在我修改此部分之前,无论数据框是否为空,整个方法都可以正常工作。
您以前有没有看过这本书,并且知道为什么将列从生成的视图中删除吗?
谢谢!