2 votes

Comment convertir un tableau Numpy 3-D en Dataframe Pandas ?

Le problème : J'ai un tableau Numpy 3D :

X

X.shape: (1797, 2, 500)

z=X[..., -1]
print(len(z))
print(z.shape)
count = 0
for bot in z:
    print(bot)
    count+=1
    if count == 3: break

Le code ci-dessus produit le résultat suivant :

1797
(1797, 2)
[23.293915 36.37388 ]
[21.594519 32.874397]
[27.29872  26.798382]

Il y a donc 1797 points de données - chacun avec une coordonnée X et une coordonnée Y et il y a 500 itérations de ces 1797 points.

Je veux un DataFrame tel que :

Index Column       |  X-coordinate  |  Y-coordinate
0                  |  X[0][0][0]    |  X[0][1][0]
0                  |  X[1][0][0]    |  X[1][1][0]
0                  |  X[2][0][0]    |  X[2][1][0]
('0') 1797 times
1                  |  X[0][0][1]    |  X[0][1][1]
1                  |  X[1][0][1]    |  X[1][1][1]
1                  |  X[2][0][1]    |  X[2][1][1]
('1' 1797 times)
.
.
.
and so on
till 500

J'ai essayé les techniques mentionnées ici, mais numpy/pandas m'échappe vraiment :

  1. Comment convertir un tableau 3D en un cadre de données (Dataframe)
  2. Comment transformer un tableau 3d en dataframe en python
  3. Convertir un tableau numpy en dataframe pandas
  4. Comment faire pour que l'on puisse avoir une vue d'ensemble de ce qui se passe dans l'entreprise ?
  5. numpy rollaxis - comment cela fonctionne-t-il exactement ?

Merci de m'aider. J'espère que je respecte la discipline en matière de questions.

1voto

Quang Hoang Points 191

Voici une solution avec des exemples de données :

a,b,c = X.shape
# in your case
# a,b,c = 1797, 500

pd.DataFrame(X.transpose(1,2,0).reshape(2,-1).T,
             index=np.repeat(np.arange(c),a),
             columns=['X_coord','Y_coord'] 
            )

Sortie :

   X_coord  Y_coord
0        0        3
0        6        9
0       12       15
0       18       21
1        1        4
1        7       10
1       13       16
1       19       22
2        2        5
2        8       11
2       14       17
2       20       23

0voto

Bruno Mello Points 3751

Essayez cette méthode :

index = np.concatenate([np.repeat([i], 1797) for i in range(500)])
df = pd.DataFrame(index=index)
df['X-coordinate'] = X[:, 0, :].T.reshape((-1))
df['Y-coordinate'] = X[:, 1, :].T.reshape((-1))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X