将数据帧拆分为多个df

时间:2017-09-23 11:58:22

标签: python pandas dataframe

例如,如果我有数据框, df 就像这样

col1 col2 col3
 1     2     34
 11    32    32
 21    62    34
 31    12    31
 13    82    35
 11    32    33
 41    32    33

我想循环3次,在每个循环中我想一个接一个地取n行,在最后一个循环中取剩下的行。所以它应该在每个循环中采用以下行

循环1

 1     2     34
 11    32    32

循环2

21    62    34
 31    12    31

循环3

13    82    35
 11    32    33
 41    32    33

3 个答案:

答案 0 :(得分:1)

使用numpy array_split

import numpy as np
num_chunks = 3
np.array_split(df,num_chunks) # this will split your array into num_chunks

您可以将新变量分配给每个块

chunk1,chunk2,chunk3 = np.array_split(df,num_chunks)

答案 1 :(得分:0)

您可以使用dataframe提供的iterrows()方法,您可以根据您的要求设置一些特定条件。对于例如我可以快速提出以下代码,虽然它可以改进,但它打印出你想要打印它的方式:

import pandas as pd

data = [[1,  2,  34],
        [11, 32, 32],
        [21, 62, 34],
        [31, 12, 31],
        [13, 82, 35],
        [11, 32, 33],
        [41, 32, 33]]

df = pd.DataFrame(data,columns=['col1','col2','col3'])

n = 2

count = 0
for index, row in df.iterrows():
   if count == n or count == 2*n:
       print("New line")
   print(row['col1'], row['col2'], row['col3'])
   count = count + 1

答案 2 :(得分:0)

如果您想使用循环,可以尝试以下操作:

n = 2
loop_var = [(i+n) if (i+n+n)<len(df) else len(df) for i in range(0, len(df)-1, n)]
start = 0
for i in loop_var:
    print(df[start:i])
    start = i

结果:

   col1  col2  col3
0     1     2    34
1    11    32    32
   col1  col2  col3
2    21    62    34
3    31    12    31
   col1  col2  col3
4    13    82    35
5    11    32    33
6    41    32    33