首页 > 解决方案 > 为什么熊猫需要重塑我的布尔索引,我该如何修复它以避免警告?

问题描述

背景

我有两个带时间戳的数据帧(索引是 id)。我想获取时间戳相差 5 分钟的所有 id。

代码

time_delta = abs(df2.time - df1.time).dt.total_seconds()
ids_out_of_range = df1[time_delta > 300].index

这给了我想要的 id,所以它是工作代码。

问题

像许多人一样,我面临这样的警告:

file.py:33: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
  ids_out_of_range = df1[time_delta > 300].index

大多数解释都集中在索引的“长度”与数据帧的“长度”不同。但:

+(Pdb) time_delta.shape
(176,)
+(Pdb) df1.shape
(176, 1)
+(Pdb) sorted(time_delta.index.values.tolist()) == sorted(df1.index.values.tolist())
True

形状是相同的,只是一个是系列,另一个是数据帧。指数(看起来)是一样的;也许订购是问题?他们没有比较平等sorted

(我试过time_delta用 DataFrame 包装,但无济于事。)

从长远来看,我希望这个警告消失(而不是2>/dev/null,谢谢)。这是我的脚本输出中的视觉混乱,而且,这是一个警告——所以理论上我应该注意它。

问题

  1. 我在做什么“错误”,因为尺寸似乎是正确的?
  2. 如何修复 (1) 以便避免此警告?

标签: pythonpandas

解决方案


以下解决了我的问题:

df1.sort_index(inplace=True)
df2.sort_index(inplace=True)
time_delta.sort_index(inplace=True)

这使索引可以完美对齐,因此它们彼此之间的顺序一定不同。


推荐阅读