2017-07-25 68 views
4

我有一個類似於以下的數據框,我打算用size = 30提取窗口,然後爲每個數據塊編寫循環並調用其他函數。在Pandas中將數據幀列拆分成相等的窗口

index = pd.date_range(start='2016-01-01', end='2016-04-01', freq='D') 
data = pd.DataFrame(np.random.rand(len(index)), index = index, columns=['random']) 

我發現下面的功能,但我不知道是否有更有效的方式來做到這一點。

def split(df, chunkSize = 30): 
    listOfDf = list() 
    numberChunks = len(df) // chunkSize + 1 
    for i in range(numberChunks): 
     listOfDf.append(df[i*chunkSize:(i+1)*chunkSize]) 
    return listOfDf 
+0

你能修好縮進嗎? – jotasi

回答

4

您可以使用列表理解。關於如何訪問dfs和另一種分解數據幀的方法,請參見SO Post

n = 200000 #chunk row size 
list_df = [df[i:i+n] for i in range(0,df.shape[0],n)] 
2

你可以用與NumPy的array_split一樣有效做到這一點:

import numpy as np 

def split(df, chunkSize = 30): 
    numberChunks = len(df) // chunkSize + 1 
    return np.array_split(df, numberChunks, axis=0) 

即使它是一個NumPy的功能,它會用正確的索引和列返回分割的數據幀。