преобразование pd.Series из строк в ndarray - PullRequest
0 голосов
/ 02 февраля 2019

Я извлекаю массив слов из столбца панд:

X = np.array(tab1['word'])

пример X: array (['dog', 'cat'], dtype = object)

X - серия из 665 панд.И затем я превращаю каждое слово в ndarray из (1 270)

for i in range(len(X)):
    tmp = X[i]
    z = func(tmp) #function that returns ndarray of (1,270)
    X[i] = z

Моя конечная цель - получить Ndarray формы: (665, 270), но вместо этого я получаю эту форму: (665,) ИЯ также не могу изменить его, когда я пытаюсь: X.reshape(665,270) Я получаю эту ошибку:

ValueError: cannot reshape array of size 665 into shape (665,270)

Функция func(word) может быть любой функцией, например:

def func(word):
    a = np.arange(0,270)
    a = a.reshape(1,270)
    return a

Есть идеи, почему это так?

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Проблема заключается в преобразовании серии строк Pandas в массив NumPy с помощью преобразовательной функции, которая при вводе строки возвращает массив (1, n).

Вот решение:

import pandas as pd
import numpy as np

# You have a series of strings
X = pd.Series(['aaa'] * 665)

# You have a transformative func that returns a (1, n) np.array
def func(word, n=270):
    return np.zeros((1, n))

# You apply the function to the series and vertically stack the results
Xs = np.vstack(X.apply(func))

# You check for the desidered shape
print(Xs.shape)
0 голосов
/ 02 февраля 2019

Ниже приведены ключевые строки:

z = list(func(tmp)) # converting returned value from func to a list

и

result = np.array([x for x in X.values])

Вот мой полный тестовый код:

import numpy as np
import pandas as pd


def func(tmp):
    return np.array([t for t in tmp])


X = pd.Series({'a': 'abc', 'x': 'xyz', 'j': 'jkl', 'z': 'zzz'})
for i in range(len(X)):
    tmp = X[i]
    z = list(func(tmp)) # converting returned value from func to a list
    X[i] = z

result = np.array([x for x in X.values])

Затем введите в консоли результат:вы увидите, что это (4, 3) ndarray.

In[3] result
Out[3]: 
array([['a', 'b', 'c'],
       ['x', 'y', 'z'],
       ['j', 'k', 'l'],
       ['z', 'z', 'z']], dtype='<U1')
...