Вызов .values ​​для столбца списков возвращает массив объектов - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть фрейм данных pandas, в котором записи одного столбца представляют собой пустые массивы, все длины N. Для некоторых операций (например, маскирование определенных значений перед усреднением) я хотел бы извлечь значения в массив, чтобы яиметь объект формы (len (индексы), N).

Однако, когда я смотрю на объект .values, он имеет форму (len (index)), а затем его первый элемент имеет длину N.

f = pd.DataFrame([[1,np.array([1,3,4])],[2,np.array([1,2,4])]], index=[2,5], columns=['sth','sth else'])
print np.shape(f['sth else'].values)

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

Редактировать: Я хотел бы выполнить операции маски на наборе значений для определенногоключ, то есть что-то вроде этого:

import numpy.ma as ma
print ma.masked_equal(f['sth else'].values,1)

, который не работает, предположительно, потому что структура массива значений f ['sth else']. values ​​не подходит для этого.Следующее работает:

ma.masked_equal(np.array([np.array([ 1.,  3.,  4.]) ,np.array([ 1.,  2.,  4.])]),1)

1 Ответ

0 голосов
/ 24 сентября 2018

Листифицируйте свою колонку и затем конвертируйте.В противном случае у вас есть массив массивов с dtype=object, и оттуда немного сложно вернуться.

np.array(f['sth else'].values.tolist())

array([[1, 3, 4],
       [1, 2, 4]])

Если это не сработает, это означает, что у вас есть рваные списки (неравной длины) иNumPy не может создать непрерывный массив целых чисел / чисел с плавающей запятой для вас (поэтому вернемся к более медленной реализации на Python).

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