布尔序列键将重新编制索引以匹配数据帧索引

2024-04-25 06:56:38 发布

您现在位置:Python中文网/ 问答频道 /正文

下面是我遇到错误的原因:

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

此错误消息的含义是什么?是否影响返回的结果?


Tags: 命令消息警告类型df列表错误原因
1条回答
网友
1楼 · 发布于 2024-04-25 06:56:38

尽管有警告,你的方法还是有效的,但最好不要依赖含蓄的、不明确的行为。

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

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

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

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

解决方案3如果需要一行代码,请使用找到的技巧here

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中的索引对应的值。这是有效的,但是行为是隐性的,而且在未来很容易改变,所以这就是警告的意义所在。

相关问题 更多 >