根据长度将数据帧拆分为相对均匀的块

YKY*_*YKY 22 python pandas

我必须创建一个函数,将提供的数据帧拆分为所需大小的块.例如,如果数据帧包含1111行,我希望能够指定400行的块大小,并获得大小为400,400和311的三个较小的数据帧.是否有便利功能来完成这项工作?什么是存储和迭代切片数据帧的最佳方法?

示例DataFrame

import numpy as np
import pandas as pd

test = pd.concat([pd.Series(np.random.rand(1111)), pd.Series(np.random.rand(1111))], axis = 1)
Run Code Online (Sandbox Code Playgroud)

小智 47

您可以使用.groupby如下.

for g, df in test.groupby(np.arange(len(test)) // 400):
    print(df.shape)
# (400, 2)
# (400, 2)
# (311, 2)
Run Code Online (Sandbox Code Playgroud)


Sco*_*ton 6

基于固定行数将大数据帧分解成更小的块的一种更 Pythonic 的方法是使用列表理解:

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

[i.shape for i in list_df]
Run Code Online (Sandbox Code Playgroud)

输出:

[(400, 2), (400, 2), (311, 2)]
Run Code Online (Sandbox Code Playgroud)