当我编写专栏文章时,我发现了一些非常有趣的事情。对于单列和多列,我使用pd.DataFrame.isna的方式有两种。当我在多个括号中编写脚本时,pd.df.isna会将整个代码返回给我
override[override.ORIGINAL_CREDITOR_ID.notna()].shape
override[override[['ORIGINAL_CREDITOR_ID']].notna()].shape
因此,第一行返回3880行,运行时间为2.5ms,而第二行返回覆盖数据帧中的所有行,也需要3.08s。 这有什么原因吗?我如何避免这种情况,因为我必须将其配置为在第二个查询中传递多个列
第一行代码是使用布尔值
Series
进行选择,而第二行代码是使用布尔值DataFrame
进行选择,处理方式非常不同,因为数据帧是二维的,有两个轴需要对齐。有一节专门说明pandas docs中的这种差异在第一种情况下,使用布尔序列进行选择,只返回布尔序列中
True
行的所有列在使用布尔数据框进行选择的情况下,返回与原始对象形状相同的对象,其中保留布尔数据框中的
True
值,并将任何False
值替换为NaN
。(它实际上被实现为DataFrame.where
)对于没有出现在布尔数据帧掩码中的行和列,默认情况下它们变成NaN
因此,我找到了一种方法,一旦我得到了True和False的数据帧,我就可以使用all或any进行逐位运算。你可以参考:
这将有助于我过滤我想要的结果,而且速度太快,即8毫秒。 我在here上找到了这个答案。所以希望你觉得这很有用。如果你需要更多的理解,请告诉我
相关问题 更多 >
编程相关推荐