【问题标题】:Split dataframe into multiple df将数据框拆分为多个df
【发布时间】:2017-09-23 11:58:22
【问题描述】:

例如,如果我有一个数据框,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

【问题讨论】:

  • 这是一个基本的编程东西,与pandas无关。您尝试为此编写什么代码,请告诉我们

标签: python pandas dataframe


【解决方案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)

【讨论】:

  • 如何使用循环来实现?可能是除以df的大小?
  • 你为什么关心使用循环?
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    如果你想使用循环,你可以尝试以下:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-14
      • 1970-01-01
      • 1970-01-01
      • 2020-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多