Разделить массив Numpy на массивы каждого столбца

1

У меня есть массив Numpy как список списков с размером n на 4 (строка, столбец). Я пытаюсь разделить данные из каждого отдельного экземпляра списка на четыре отдельных массива, каждый из которых содержит всю информацию из одного столбца, поэтому я могу добавить его в кадр данных pandas. Из этого:

[[126 188 166   1]
 [111 173 149   1]
 [ 81 119 123   2]
 [ 83 122 124   2]
 [ 84 122 124   2]
 [255 255 255   3]
 [255 255 255   3]
 [255 255 255   3]]

К этому:

bBand = [126,111,81,...,255]
gBand = [188,173,119,...,255]
rBand = [166,149,123,...,255]
class = [1,1,2,...,3]

Текущий код:

   MasterList = np.arrray([[126, 188, 166,   1],[111, 173, 149,   1],[ 81, 119, 123,   2],[ 83, 122, 124,   2],[ 84, 122, 124,   2],[255, 255, 255,   3],[255, 255, 255,   3],[255, 255, 255,   3]])
   print(MasterList)
   columns = ["bBand","gBand","rBand","class"]
   df = pd.DataFrame(MasterList.reshape(-1, len(MasterList)),columns=columns)
  • 2
    Вы говорите, что хотите создать четыре отдельных массива, «чтобы я мог добавить его во фрейм данных pd.DataFrame(MasterList, columns=columns) », но если все, что вам нужно, это df, pd.DataFrame(MasterList, columns=columns) сработал бы. Зачем вам нужно разделение, и зачем менять форму?
Теги:
pandas
numpy
split

1 ответ

2
Лучший ответ

Как упоминалось в @DSM, вы можете сделать это следующим образом:

import numpy as np
import pandas as pd

data = np.array([[126, 188, 166, 1],
                 [111, 173, 149, 1],
                 [81, 119, 123, 2],
                 [83, 122, 124, 2],
                 [84, 122, 124, 2],
                 [255, 255, 255, 3],
                 [255, 255, 255, 3],
                 [255, 255, 255, 3]])

frame = pd.DataFrame(data=data, columns=["bBand","gBand","rBand","class"])
print(frame)

Выход

   bBand  gBand  rBand  class
0    126    188    166      1
1    111    173    149      1
2     81    119    123      2
3     83    122    124      2
4     84    122    124      2
5    255    255    255      3
6    255    255    255      3
7    255    255    255      3

Нет необходимости изменять размер массива. Если вам нужны отдельные списки, вы можете попробовать следующее:

data = np.array([[126, 188, 166, 1],
                 [111, 173, 149, 1],
                 [81, 119, 123, 2],
                 [83, 122, 124, 2],
                 [84, 122, 124, 2],
                 [255, 255, 255, 3],
                 [255, 255, 255, 3],
                 [255, 255, 255, 3]])


for name, column in zip(["bBand","gBand","rBand","class"], data.T):
    print(name, column)

Выход

bBand [126 111  81  83  84 255 255 255]
gBand [188 173 119 122 122 255 255 255]
rBand [166 149 123 124 124 255 255 255]
class [1 1 2 2 2 3 3 3]

Наконец, вы можете напрямую установить значения:

bBand = list(data[:, 0])
gBand = list(data[:, 1])
rBand = list(data[:, 2])
_class = list(data[:, 3])

Ещё вопросы

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