下面是我遇到错误的原因:
df.loc[a_list][df.a_col.isnull()]
a_list
的类型是Int64Index
,它包含一个行索引列表。所有这些行索引都属于df
。
df.a_col.isnull()
部分是过滤所需的条件。
如果我单独执行以下命令,则不会收到任何警告:
df.loc[a_list]
df[df.a_col.isnull()]
但如果我把它们放在一起,就会得到警告消息(但我可以看到结果):
Boolean Series key will be reindexed to match DataFrame index
此错误消息的含义是什么?是否影响返回的结果?
尽管有警告,你的方法还是有效的,但最好不要依赖含蓄的、不明确的行为。
解决方案1,选择布尔掩码中的索引:
解决方案2,分两步完成:
解决方案3如果需要一行代码,请使用找到的技巧here:
警告来自这样一个事实:布尔向量
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
中的索引对应的值。这是有效的,但是行为是隐性的,而且在未来很容易改变,所以这就是警告的意义所在。相关问题 更多 >
编程相关推荐