索引编制是否使Sliced Pandas数据帧更快?

rkjt50r983

我有一个熊猫数据框,其中包含超过一百万条记录。它的列之一是日期时间。我的数据样本如下所示:

time,x,y,z
2015-05-01 10:00:00,111,222,333
2015-05-01 10:00:03,112,223,334
...

我需要在特定时期内有效地获得记录。下面的幼稚方式非常耗时。

new_df = df[(df["time"] > start_time) & (df["time"] < end_time)]

我知道在像MySQL这样的DBMS上,通过指定时间段来按时间字段建立索引对于获取记录很有效。

我的问题是

  1. 像这样的大熊猫索引df.index = df.time会加快切片过程吗?
  2. 如果问题1的答案为“否”,那么在特定时间段内获得大熊猫记录的常用有效方法是什么?
亚力山大

让我们创建一个具有一百万行和时间性能的数据框。索引是熊猫时间戳。

df = pd.DataFrame(np.random.randn(1000000, 3), 
                  columns=list('ABC'), 
                  index=pd.DatetimeIndex(start='2015-1-1', freq='10s', periods=1000000))

以下是从最快到最慢排序的结果(在同一台计算机上同时使用v。0.14.1(不要问...)和最新版本0.17.1进行了测试):

%timeit df2 = df['2015-2-1':'2015-3-1']
1000 loops, best of 3: 459 µs per loop (v. 0.14.1)
1000 loops, best of 3: 664 µs per loop (v. 0.17.1)

%timeit df2 = df.ix['2015-2-1':'2015-3-1']
1000 loops, best of 3: 469 µs per loop (v. 0.14.1)
1000 loops, best of 3: 662 µs per loop (v. 0.17.1)

%timeit df2 = df.loc[(df.index >= '2015-2-1') & (df.index <= '2015-3-1'), :]
100 loops, best of 3: 8.86 ms per loop (v. 0.14.1)
100 loops, best of 3: 9.28 ms per loop (v. 0.17.1)

%timeit df2 = df.loc['2015-2-1':'2015-3-1', :]
1 loops, best of 3: 341 ms per loop (v. 0.14.1)
1000 loops, best of 3: 677 µs per loop (v. 0.17.1)

以下是将Datetime索引作为一列的计时:

df.reset_index(inplace=True)

%timeit df2 = df.loc[(df['index'] >= '2015-2-1') & (df['index'] <= '2015-3-1')]
100 loops, best of 3: 12.6 ms per loop (v. 0.14.1)
100 loops, best of 3: 13 ms per loop (v. 0.17.1)

%timeit df2 = df.loc[(df['index'] >= '2015-2-1') & (df['index'] <= '2015-3-1'), :]
100 loops, best of 3: 12.8 ms per loop (v. 0.14.1)
100 loops, best of 3: 12.7 ms per loop (v. 0.17.1)

以上所有索引技术都产生相同的数据帧:

>>> df2.shape
(250560, 3)

在这种情况下,前两种方法似乎是最好的,而第四种方法也可以使用最新版本的Pandas正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

多次索引熊猫数据帧的更快方法

来自分类Dev

Python Pandas索引编制改革

来自分类Dev

Pandas 数据帧中的逻辑索引

来自分类Dev

正确的索引编制以在Pandas中创建新的数据框

来自分类Dev

如何为多索引熊猫数据帧重新编制索引?

来自分类Dev

如何为多索引熊猫数据帧重新编制索引?

来自分类Dev

Pandas 基于另一个单索引数据帧查询多索引数据帧

来自分类Dev

Pandas,如何重新索引通过附加多个数据帧生成的数据帧。

来自分类Dev

如何使用 Pandas 重新排序/排序数据帧索引?

来自分类Dev

从带有 timedelta 索引的 Pandas 数据帧绘图

来自分类Dev

Python Pandas:获取数据帧中某个值的索引标签

来自分类Dev

在复杂的 Pandas 数据帧上重新索引和插值

来自分类Dev

将 Pandas 数据帧合并到带日期的多索引

来自分类Dev

Pandas - 使用 2 个数据帧进行索引的最快方式

来自分类Dev

python pandas读取数据帧并且不包含索引

来自分类Dev

pandas(系列和数据帧)中布尔索引的更短方法?

来自分类Dev

串联后如何为pandas DataFrame重新编制索引

来自分类Dev

与0.13.1相比,Pandas的索引编制非常慢,为0.15

来自分类Dev

无法在熊猫数据框中按时间戳编制索引

来自分类Dev

在熊猫数据框中按行计数编制索引

来自分类Dev

熊猫数据框索引编制不正确

来自分类Dev

Pandas 数据帧索引在索引数据帧的子集时导致问题。如何删除索引或防止错误发生?

来自分类Dev

数据帧乘法的更快方法

来自分类Dev

数据帧由索引的数据帧子集

来自分类Dev

有没有更快的方法在numpy中进行这种索引编制?

来自分类Dev

Elasticsearch-什么更快?为相同的文档编制索引或使用detect_noop更新:是吗?

来自分类Dev

使用数据框的列值为多索引数据框的行编制索引

来自分类Dev

Python Pandas:合并2个数据帧,其中一帧的列作为最终结果的索引

来自分类Dev

Python Pandas:组合2个数据帧,其中一帧的列作为最终结果的索引

Related 相关文章

  1. 1

    多次索引熊猫数据帧的更快方法

  2. 2

    Python Pandas索引编制改革

  3. 3

    Pandas 数据帧中的逻辑索引

  4. 4

    正确的索引编制以在Pandas中创建新的数据框

  5. 5

    如何为多索引熊猫数据帧重新编制索引?

  6. 6

    如何为多索引熊猫数据帧重新编制索引?

  7. 7

    Pandas 基于另一个单索引数据帧查询多索引数据帧

  8. 8

    Pandas,如何重新索引通过附加多个数据帧生成的数据帧。

  9. 9

    如何使用 Pandas 重新排序/排序数据帧索引?

  10. 10

    从带有 timedelta 索引的 Pandas 数据帧绘图

  11. 11

    Python Pandas:获取数据帧中某个值的索引标签

  12. 12

    在复杂的 Pandas 数据帧上重新索引和插值

  13. 13

    将 Pandas 数据帧合并到带日期的多索引

  14. 14

    Pandas - 使用 2 个数据帧进行索引的最快方式

  15. 15

    python pandas读取数据帧并且不包含索引

  16. 16

    pandas(系列和数据帧)中布尔索引的更短方法?

  17. 17

    串联后如何为pandas DataFrame重新编制索引

  18. 18

    与0.13.1相比,Pandas的索引编制非常慢,为0.15

  19. 19

    无法在熊猫数据框中按时间戳编制索引

  20. 20

    在熊猫数据框中按行计数编制索引

  21. 21

    熊猫数据框索引编制不正确

  22. 22

    Pandas 数据帧索引在索引数据帧的子集时导致问题。如何删除索引或防止错误发生?

  23. 23

    数据帧乘法的更快方法

  24. 24

    数据帧由索引的数据帧子集

  25. 25

    有没有更快的方法在numpy中进行这种索引编制?

  26. 26

    Elasticsearch-什么更快?为相同的文档编制索引或使用detect_noop更新:是吗?

  27. 27

    使用数据框的列值为多索引数据框的行编制索引

  28. 28

    Python Pandas:合并2个数据帧,其中一帧的列作为最终结果的索引

  29. 29

    Python Pandas:组合2个数据帧,其中一帧的列作为最终结果的索引

热门标签

归档