форма панда данных в 3D-массив - PullRequest
0 голосов
/ 01 июля 2018

Я хочу преобразовать pandas dataframe в 3d-массив, но не могу получить реальную форму 3d-массива:

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df['a'][3:]=1
df['a'][:3]=2
a3d = np.array(list(df.groupby('a').apply(pd.DataFrame.as_matrix)))
a3d.shape
(2,)

Но когда я настрою это, я смогу получить форму

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df['a'][2:]=1
df['a'][:2]=2
a3d = np.array(list(df.groupby('a').apply(pd.DataFrame.as_matrix)))
a3d.shape
(2,2,5)

Что-то не так с кодом? Спасибо!

1 Ответ

0 голосов
/ 01 июля 2018

Ничего плохого в коде, потому что в первом случае у вас нет трехмерного массива. По определению массива N-d (здесь 3d) первые две строки объясняют, что каждое измерение должно иметь одинаковый размер . В первом случае:

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df['a'][3:]=1
df['a'][:3]=2
a3d = np.array(list(df.groupby('a').apply(pd.DataFrame.as_matrix))) 

У вас есть 1-й массив размером 2 (это то, что показывает a3d.shape), который содержит 2-й массив форм (1,5) и (3,5)

a3d[0].shape
Out[173]: (1, 5)
a3d[1].shape
Out[174]: (3, 5)

поэтому оба элемента в первом измерении того, что вы называете a3d, не имеют одинакового размера и не могут рассматриваться как другие измерения этого ndarray.

Во втором случае

df = pd.DataFrame(np.random.rand(4,5), columns = list('abcde'))
df['a'][2:]=1
df['a'][:2]=2
a3d = np.array(list(df.groupby('a').apply(pd.DataFrame.as_matrix)))

a3d[0].shape
Out[176]: (2, 5)
a3d[1].shape
Out[177]: (2, 5)

оба элемента вашего первого измерения имеют одинаковый размер, поэтому a3d - это трехмерный массив.

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