当前位置:  开发笔记 > 编程语言 > 正文

布尔系列键将重新编制索引以匹配DataFrame索引

如何解决《布尔系列键将重新编制索引以匹配DataFrame索引》经验,为你挑选了1个好方法。

这是我遇到错误的方式:

df.loc[a_list][df.a_col.isnull()]

类型a_listInt64Index,它包含行索引列表.所有这些行索引都属于df.

df.a_col.isnull()部分是我需要过滤的条件.

如果我单独执行以下命令,我不会收到任何警告:

df.loc[a_list]
df[df.a_col.isnull()]

但如果我把它们放在一起df.loc[a_list][df.a_col.isnull()],我会得到警告信息(但我可以看到结果):

布尔系列键将重新编制索引以匹配DataFrame索引

这个错误消息的含义是什么?它会影响它返回的结果吗?



1> IanS..:

尽管有警告,您的方法仍然有效,但最好不要依赖隐含的,不明确的行为.

解决方案1,在a_list布尔掩码中选择索引:

df[df.index.isin(a_list) & df.a_col.isnull()]

解决方案2,分两步完成:

df2 = df.loc[a_list]
df2[df2.a_col.isnull()]

解决方案3,如果你想要一个单行,请使用这里找到的技巧:

df.loc[a_list].query('a_col != a_col')

警告来自这样的事实:布尔向量df.a_col.isnull()是长度df,而df.loc[a_list]长度是a_list,即更短.因此,有些指数df.a_col.isnull()不在df.loc[a_list].pandas做的是在与调用数据帧相同的索引上重新索引布尔向量.实际上,它来自df.a_col.isnull()对应于索引的值a_list.这是有效的,但行为是隐含的,并且可能在将来很容易改变,因此这就是警告的内容.


当使用在另一个数据帧上计算的布尔掩码或在同一数据帧中的不同视图查询一个数据帧时,也会发生此警告.
推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有