首页 > 解决方案 > 用python分割数据框

问题描述

我想做的很简单,用其他语言。我想拆分一个表,使用“for”循环每隔五行拆分一个数据帧。

这个想法是我有一个数据框,它每隔一段时间就会添加一个新行,比如用不同的问题回答一个表单,每个答案都被添加到一个特定的列,比如带有电子表格的谷歌表单。

我尝试过的是以下内容:

import pandas as pd
dp=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
df1=pd.DataFrame(data=dp)
for i in range(0, len(dp)):
   if i%5==0:
      df = df1.iloc[i,:]
      print(df)          
print(df)

我知道这并不多,但它仍然是一个尝试。现在,我不能做的是每次循环到达i mod 5 == 0行时使用新数据框创建一个新变量。

标签: pythonpandassplit

解决方案


我认为您正在尝试使用已知数量的字段将平面列表转换为行和列。

我会做这样的事情:

import numpy as np
import pandas as pd

numFields = 3   # this is five in your case
fieldNames = ['color', 'animal', 'amphibian'] # totally optional 

# this is your 'dp'
inputData = ['brown', 'dog','false','green', 'toad','true']

flatDataArray = np.asarray(inputData)

reshapedData = flatDataArray.reshape(-1, numFields)

df = pd.DataFrame(reshapedData, columns=fieldNames) # you only need 'columns' if you want to name fields

print(df)

这使:

    color   animal  amphibian
0   brown   dog     false
1   green   toad    true

- 更新 -

从您上面的评论中,我看到您想要任意数量的数据帧 - 每个五行组一个。为什么不创建一个数据框列表(即你有dfs[0], dfs[1])?

# continuing with from where the previous code left off...

dfs = []

for group in reshapedData:
     dfs.append(pd.DataFrame(group))

for df in dfs:
    print(df)

打印:

   0
0  brown
1    dog
2  false

   0
0  green
1   toad
2   true

推荐阅读