Заменить и плоский массив Numpy - PullRequest
0 голосов
/ 02 июля 2019

У меня есть ndarray с формой (2,1). Каждый элемент ndarray с формой (4) Я хочу сделать датафрейм с формой (2,4)

правильных форм:

df.shape = (2,1)
df[0].shape = (1,)
df[0][0].shape = (4,)

например:

df[0][0] = [1 2 2 4]
df[1][0] = [1 1 1 1]

Я хочу, чтобы он выглядел так:

df[0] = [1 2 2 4]
df[1] = [1 1 1 1]

Ответы [ 3 ]

0 голосов
/ 02 июля 2019

Вы можете использовать другой фрейм данных для перестановки, а затем установить его обратно, например:

df2 = pd.DataFrame([df[0][0], df[0][1]])
df = df2

ОБНОВЛЕНИЕ : относительно комментария от @Koren Levenbrown

df = np.array([df[column][0] for column in df])

- это другое решение

0 голосов
/ 02 июля 2019

Похоже, у вас есть массив dtype объекта (но почему он называется df?):

In [150]: df = np.empty((2,1),object)                                                                           
In [151]: df[0,0] = np.array([1,2,2,4])                                                                         
In [152]: df[1,0] = np.array([1,1,1,1])                                                                         
In [153]: df                                                                                                    
Out[153]: 
array([[array([1, 2, 2, 4])],
       [array([1, 1, 1, 1])]], dtype=object)
In [154]: df.shape                                                                                              
Out[154]: (2, 1)
In [155]: df[0].shape                                                                                           
Out[155]: (1,)
In [156]: df[0,0].shape                                                                                         
Out[156]: (4,)

np.concatenate (или одно из производных stack) может присоединиться к списку /итерируемые массивы, если они соответствуют размеруесли мы сначала растянем (или сожмем) массив так, чтобы он (2,) имел форму:

In [158]: np.stack(df.ravel())                                                                                  
Out[158]: 
array([[1, 2, 2, 4],
       [1, 1, 1, 1]])
0 голосов
/ 02 июля 2019

Вы хотите что-то вроде этого:

df = pd.DataFrame(a.reshape((2, 4)).T)

df
   0  1
0  1  1
1  2  1
2  2  1
3  4  1

Или:

df = pd.DataFrame(a.reshape((2, 4)))

df
   0  1  2  3
0  1  2  2  4
1  1  1  1  1
...