Разделение информационного кадра с помощью Python - PullRequest
0 голосов
/ 26 сентября 2018

То, что я хочу сделать, довольно просто, на других языках.Я хочу разделить таблицу, используя цикл «for» для разделения фрейма данных каждую пятую строку.

Идея состоит в том, что у меня есть фрейм данных, который добавляет новую строку, очень часто, например, отвечая на форму сразличные вопросы, и каждый ответ добавляется в определенный столбец, например, Google Forms with SpreadSheet.

Я попробовал следующее:

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.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Я думаю, что вы пытаетесь преобразовать плоский список в строки и столбцы, используя известное количество полей.

Я бы сделал что-то вроде этого:

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
0 голосов
/ 26 сентября 2018

numpy.split

lod = np.split(df1, np.arange(1, 16, 5))

print(*lod, sep='\n\n')

   0
0  0

   0
1  1
2  2
3  3
4  4
5  5

     0
6    6
7    7
8    8
9    9
10  10

     0
11  11
12  12
13  13
14  14
15  15

lod = np.split(df1, np.arange(0, 16, 5)[1:])

print(*lod, sep='\n\n')

   0
0  0
1  1
2  2
3  3
4  4

   0
5  5
6  6
7  7
8  8
9  9

     0
10  10
11  11
12  12
13  13
14  14

     0
15  15
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...