Не можете преобразовать серию pandas в 2d массив? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть pandas серия. Его размер равен 10240. Каждое значение в серии представляет собой двумерный массив размером 143. Я превращаю весь двумерный массив размера 143 в одномерный массив размера 143. После этого я преобразую ряд в массив numpy. Так что я должен получить 2d массив размером (10240 * 143), верно? Но я этого не понимаю. Я получаю 2d массив формы (10240) и размером 10240. Я не знаю, что я делаю неправильно. Мой код указан ниже.

def get_subjects(x):
  print(type(x)) #2d list
  print(len(x)) # 2, 143
  x = to_categorical(x, num_classes=len(subjects)+1).sum(axis=0)
  print(type(x)) # numpy array
  print(x.size) # 143
  return x

print(type(train_data["subject_id"])) # pandas series
print(train_data["subject_id"].size) # 10240
subject_train = train_data["subject_id"].apply(lambda x: get_subjects(x)).to_numpy()
print(type(subject_train)) # numpy array
print(subject_train.size) # 10240 

1 Ответ

1 голос
/ 15 апреля 2020

Вы не можете получить ожидаемую форму, потому что 'subject_train' - это массив массивов. Чтобы избежать этого, вы можете разбить массив 1d, возвращаемый get_subjects, на несколько столбцов, а затем преобразовать в массив numpy, как показано ниже.

import pandas as pd
import numpy as np
# df has 5 rows and each cell is made of 3x4 arrays 
df = pd.DataFrame({'data':[np.random.randint(low =1, high =10, size=(3,4)),
                           np.random.randint(low =1, high =10, size=(3,4)),
                           np.random.randint(low =1, high =10, size=(3,4)),
                           np.random.randint(low =1, high =10, size=(3,4)),
                           np.random.randint(low =1, high =10, size=(3,4)),
                          ]})

def get_subjects(x):
  #substitute to x = to_categorical(x, num_classes=len(subjects)+1).sum(axis=0)
  x = x.reshape(-1) # this one reshapes 3x4 array to 1x12
  return x

# apply(pd.series) splits the each row made of 1x12 array to 12 seperate columns
df["data"].apply(lambda x: get_subjects(x)).apply(pd.Series).to_numpy().shape

приводит к

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