Разделение информационного кадра с помощью Python

1

Поэтому то, что я хочу сделать, довольно просто, на других языках. Я хочу разбить таблицу, используя цикл "для", чтобы разделить кадр данных каждую пятую строку.

Идея состоит в том, что у меня есть dataframe, который добавляет новую строку, каждый так часто, как ответ на форму с разными вопросами, и каждый ответ добавляется в определенный столбец, например, в Google Forms с 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.

У кого-нибудь есть предложение?

  • 0
    Непонятно, какой вывод вы хотите получить. Вы хотите, чтобы множество отдельных пятирядных фреймов данных хранилось в varables? Или вы пытаетесь преобразовать плоский список в один фрейм данных со строками и столбцами? Может быть, вы просто пытаетесь вывести на экран пять строк за раз.
  • 0
    Я понимаю путаницу. То, что я хочу сделать, это первое. Я хочу генерировать переменные, которые хранят фрейм данных каждую пятую строку. Например: я хочу, чтобы строки 0–4 хранились в переменной с именем V1, 5–9 хранились в V2 и т. Д. Можно ли это сделать?
Показать ещё 1 комментарий
Теги:
pandas
split

2 ответа

1

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
0

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

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

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

--ОБНОВИТЬ--

Из вашего комментария выше, я вижу, что вы хотели бы произвольное число dataframes- по одному для каждой группы из пяти строк. Почему бы не создать список фреймов данных (т.е. У вас есть 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню