her*_*lla 6 python resampling dataframe python-2.7 pandas
假设您有一个1分钟时间序列的数据框,其中包含索引,4列和400万行。当您尝试执行以下操作时:
conversion = {'Open': 'first', 'High': 'max', 'Low': 'min', 'Close': 'last'}
df1 = df.resample('5Min', how=conversion)
Run Code Online (Sandbox Code Playgroud)
这花费了荒谬的时间(20-30分钟)。我如何加快这个过程?
熊猫18,Python 2.7
重新采样似乎在大小为 (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
Run Code Online (Sandbox Code Playgroud)
具有不规则索引和一些 nan:
idx1 = pd.date_range('1/1/1900', periods=10000000, freq='Min')
idx2 = pd.date_range('1/1/1940', periods=10000000, freq='Min')
idx3 = pd.date_range('1/1/1980', periods=10000000, freq='Min')
idx4 = pd.date_range('1/1/2020', periods=10000000, freq='Min')
idx = np.array([np.random.choice(idx1, 1000000), np.random.choice(idx2, 1000000), np.random.choice(idx3, 1000000),
np.random.choice(idx4, 1000000)]).flatten()
np.random.shuffle(idx)
df = pd.DataFrame(np.random.randint(100, size=(4000000, 4)), columns = ["Open", "High", "Low", "Close"], 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
Run Code Online (Sandbox Code Playgroud)
因此,对于您的案例来说,除了重新采样之外,其他事情似乎也需要时间。
| 归档时间: |
|
| 查看次数: |
1674 次 |
| 最近记录: |