Цикл обработки данных - PullRequest
       1

Цикл обработки данных

0 голосов
/ 05 октября 2018

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

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

import pandas as pd

df = pd.read_csv("column.csv", delimiter=";", header=0, index_col=(0))

number_of_pixels = int(len(df.index))

print("You have " + str(number_of_pixels) +" pixels in your file")
number_of_rows = int(input("Enter number of rows you want to create"))
list=[] #this list contains the number of pixels per row

for i in range (0,number_of_rows): #this loop fills the list with the number of pixels per row
    pixels_per_row=int(input("Enter number of pixels in row " + str(i)))
    list.append(pixels_per_row)

print(list)

После разрезания столбца на несколько фреймов данных я хочу переставить каждый фрейм данных и объединить все фреймы обратно вместе, используя:

df1=df1.reset_index(drop=True) 
df1=df1.T 

df2=df2.reset_index(drop=True)
df2=df2.T

frames = [df1,df2]

result = pd.concat(frames, axis=0)

print(result) 

Поэтому я хочу создать цикл, который обрезает мой фрейм данныхв несколько кадров на позициях, хранящихся в моем списке.

Спасибо!

1 Ответ

0 голосов
/ 05 октября 2018

Эта проблема лучше решается с помощью numpy.Я начну с того, что вы получите список от вашего пользовательского ввода.Весь смысл в том, чтобы использовать numpy.split для разделения значений на основе совокупного числа запрошенных пикселей, а затем создать новую DataFrame

Настройка

import numpy as np
import pandas as pd

np.random.seed(123)
df = pd.DataFrame({'val': np.random.randint(1,10,50)})

lst = [4,10,2,1,15,8,9,1]

Код

pd.DataFrame(np.split(df.val.values, np.cumsum(lst)[:-1]))

Вывод

    0    1    2    3    4    5    6    7    8    9   10   11   12   13   14
0   3  3.0  7.0  2.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
1   4  7.0  2.0  1.0  2.0  1.0  1.0  4.0  5.0  1.0  NaN  NaN  NaN  NaN  NaN
2   1  5.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
3   2  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN
4   8  4.0  3.0  5.0  8.0  3.0  5.0  9.0  1.0  8.0  4.0  5.0  7.0  2.0  6.0
5   7  3.0  2.0  9.0  4.0  6.0  1.0  3.0  NaN  NaN  NaN  NaN  NaN  NaN  NaN
6   7  3.0  5.0  5.0  7.0  4.0  1.0  7.0  5.0  NaN  NaN  NaN  NaN  NaN  NaN
7   8  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN

Если в вашем списке больше пикселей, чем общее количество строк в исходном DataFrame, тогда вы получите дополнительные все NaN строк в вашемвыход.Если сумма lst меньше общего количества пикселей, он добавит их ко всем последним строкам.Поскольку вы не указали ни одно из этих условий в своем вопросе, не знаете, как бы вы хотели с этим справиться.

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