2017-09-23 193 views
0

例如,如果我有一个数据帧,DF这样分割数据帧分成多个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 
+0

这是一个基本的编程东西,它没有任何关系'pandas'。你为此写了什么代码,请告诉我们 –

回答

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) 
+0

我该如何使用循环来做到这一点?可能是通过分割df的大小? – asdlfkjlkj

+2

为什么你在乎使用循环? – alexis

0

您可以使用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 
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