加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 如何加快Pandas中的重采样过程?

发布时间:2020-12-16 22:49:55 所属栏目:Python 来源:网络整理
导读:假设您有一个1分钟时间序列的数据框,包含索引,4列和400万行.当你尝试做类似的事情: conversion = {'Open': 'first','High': 'max','Low': 'min','Close': 'last'} df1 = df.resample('5Min',how=conversion) 这需要一段荒谬的时间(20-30分钟).我怎样才能加

假设您有一个1分钟时间序列的数据框,包含索引,4列和400万行.当你尝试做类似的事情:

 conversion = {'Open': 'first','High': 'max','Low': 'min','Close': 'last'}
 df1 = df.resample('5Min',how=conversion)

这需要一段荒谬的时间(20-30分钟).我怎样才能加快这个过程?

Pandas 18,Python 2.7

最佳答案
Resample似乎在大小(4000000,4)的数据集上运行得非常快:

idx = pd.date_range('1/1/2010',periods=4000000,freq='T')
df = pd.DataFrame(np.random.rand(4000000,4),columns = ["Open","High","Low","Close"],index = idx)
%timeit df.resample("5Min").agg(conversion)
1 loop,best of 3: 253 ms per loop

有一个不规则的索引和一些nan:

idx1 = pd.date_range('1/1/1900',periods=10000000,freq='Min')
idx2 = pd.date_range('1/1/1940',freq='Min')
idx3 = pd.date_range('1/1/1980',freq='Min')
idx4 = pd.date_range('1/1/2020',freq='Min')
idx = np.array([np.random.choice(idx1,1000000),np.random.choice(idx2,np.random.choice(idx3,np.random.choice(idx4,1000000)]).flatten()
np.random.shuffle(idx)
df = pd.DataFrame(np.random.randint(100,size=(4000000,4)),index = idx)
df.loc[np.random.choice(idx,100000),"Open"] = np.nan
df.loc[np.random.choice(idx,50000),"High"] = np.nan
df.loc[np.random.choice(idx,500000),"Low"] = np.nan
df.loc[np.random.choice(idx,20000),"Close"] = np.nan
%timeit df.resample("5Min").agg(conversion)
1 loop,best of 3: 5.06 s per loop

因此,似乎除了重新采样之外的其他事情需要时间来处理您的情况.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读