如何将pandas.DataFrame平均拆分为N组?

2024-10-02 00:42:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要对存储在pandas.DataFrame中的数据集执行n倍(在我的特殊情况下,是5倍)交叉验证。我目前的方式似乎是重新排列行标签

spreadsheet1 = pd.ExcelFile("Testing dataset.xlsx") 
dataset = spreadsheet1.parse('Sheet1') 

data = 5 * [pd.DataFrame()]

i = 0
while(i  < len(dataset)):
    j = 0
    while(j < 5 and i < len(dataset)):
        data[j] = (data[j].append(dataset.iloc[i])).reset_index(drop = True)
        i += 1
        j += 1

如何高效/智能地分割数据帧而不改变列的顺序


Tags: 数据dataframepandasdatalen方式情况标签
2条回答

使用np.array_split将其分解为“均匀”大小的数据帧列表。如果对完整的数据帧进行采样,也可以进行洗牌

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(24).reshape(-1,2), columns=['A', 'B'])
N = 5    

np.array_split(df, N)
#np.array_split(df.sample(frac=1), N)  # Shuffle and split

[   A  B
 0  0  1
 1  2  3
 2  4  5,
     A   B
 3   6   7
 4   8   9
 5  10  11,
     A   B
 6  12  13
 7  14  15,
     A   B
 8  16  17
 9  18  19,
      A   B
 10  20  21
 11  22  23]

我仍然不知道你为什么要这样做,但这里有一个解决办法

df['fold'] = np.random.randint(1, 6, df.shape[0])

例如,您的第一次折叠是

df.loc[df['fold'] == 1]

相关问题 更多 >

    热门问题