2016-02-11 2 views
1

Как мы можем извлечь значения pandas.DataFrame в качестве матрицы, когда DataFrame должен быть инициализирован без каких-либо значений (так как размерность каждого столбца, то неизвестно):Получение матрицы из панд DataFrame: прилипла к DTYPE объект

Например:

from pandas import DataFrame 
df = DataFrame() 
df = df.append(dict(foo=np.ones(2), bar=np.ones(3)), ignore_index=True) # without ignore it crashes 
df = df.append(dict(foo=np.zeros(2), bar=np.zeros(3)), ignore_index=True) 
print(df) 

Out:

  bar    foo 
0 [1.0, 1.0] [1.0, 1.0, 1.0] 
1 [0.0, 0.0] [0.0, 0.0, 0.0] 

у меня есть трудности, получать данные из каждого столбца (bar, foo) как матрицу, которую я мог бы срезать (в идеале: df ['bar'] [:, 2]). В самом деле, в настоящее время он остается массивным массивом с dtype = object.

df['foo'].as_matrix() 
Out: array([array([ 0., 0., 0.]), array([ 1., 1., 1.])], dtype=object) 
+0

В вашем исходном образце кода нет «бара», но в вашем выводе и втором примере кода есть «бар». Я думаю, у вас может быть опечатка в этом первом фрагменте кода? Кроме того, df.append() не встречается на месте, если вы не укажете, что kwarg. Вы намеревались сделать df = df.append (... – SPKoder

+0

Мой плохой, я отредактировал сообщение. Спасибо. – kingjr

ответ

4

Ваша проблема в том, что путь вы делаете инициализацию, вы на самом деле не создает DataFrame ценностей, но вместо того, чтобы создавать DataFrame из Numpy массивов, как вы можете видеть, глядя на df.shape, который равен (2,1), а не (2,3).

Непонятно мне, что вы на самом деле хотите, чтобы массив был, поскольку вы начинаете с создания столбца с именем foo, который имеет одно значение (массив). Если вы хотите создать DataFrame, как представляется (массив 2x3), вы должны были бы сделать что-то больше похоже на следующее:

df = DataFrame(np.zeros((1,3))) 
df = df.append(DataFrame(np.ones((1,3))), ignore_index=True) 

Теперь вы можете просто сделать df.ix[:,1] или df.as_matrix(), и так далее.

+0

Спасибо. Я хотел бы иметь несколько столбцов ('foo',' bar') с различными размерами: например: 'df ['foo']. shape = (n, 2)' и 'df ['bar']. shape = (n, 3)', где n является 'len (df)'. Я отредактировал вопрос, чтобы уточнить – kingjr

+1

Тогда это не DataFrame. DataFrames - 2d. – cge

+0

Хорошо, спасибо. Есть ли у pandas объект, который будет иметь эту функцию? – kingjr

Смежные вопросы