Konvertieren pandas dataframe zu numpy-array mit Header und dtypes
Ich habe versucht, zu konvertieren, ein pandas dataframe in einen numpy-array, tragen über der dtypes und header-Namen für eine einfache Referenz. Ich muss dies tun, da die Verarbeitung auf pandas ist viel zu langsam, numpy ist 10-Fach schneller. Ich habe diesen code aus, SO dass gibt mir was ich brauche, abgesehen davon, dass das Ergebnis nicht Aussehen wie ein standard-numpy array - D. H. es zeigt nicht die Spalten-Nummern in der Form.
[In]:
df = pd.DataFrame(randn(10,3),columns=['Acol','Ccol','Bcol'])
arr_ip = [tuple(i) for i in df.as_matrix()]
dtyp = np.dtype(list(zip(df.dtypes.index, df.dtypes)))
dfnp= np.array(arr_ip, dtype=dtyp)
print(dfnp.shape)
dfnp
[Out]:
(10,) #expecting (10,3)
array([(-1.0645345 , 0.34590193, 0.15063829),
( 1.5010928 , 0.63312454, 2.38309797),
(-0.10203999, -0.40589525, 0.63262773),
( 0.92725915, 1.07961763, 0.60425353),
( 0.18905164, -0.90602597, -0.27692396),
(-0.48671514, 0.14182815, -0.64240004),
( 0.05012859, -0.01969079, -0.74910076),
( 0.71681329, -0.38473052, -0.57692395),
( 0.60363249, -0.0169229 , -0.16330232),
( 0.04078263, 0.55943898, -0.05783683)],
dtype=[('Acol', '<f8'), ('Ccol', '<f8'), ('Bcol', '<f8')])
Bin ich etwas fehlt, oder gibt es einen anderen Weg, dies zu tun? Ich habe viele df ' s zu konvertieren und Ihre dtypes-und Spaltennamen unterscheiden, so brauche ich diesen automatisierten Ansatz. Ich auch brauchen um effizient zu sein, aufgrund der großen Anzahl von df.
- FYI, ist ein anderer Ansatz hier (mit dem Vorteil der Umwandlung von pandas dtype=Objekt numpy dtype=string: stackoverflow.com/questions/52579601/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
df.to_records()
konvertieren Sie Ihre dataframe zu einem strukturierten array.Können Sie pass
index=False
index zu entfernen von Ihrem Ergebnis.Eines strukturierten Arrays haben immer eine dimension. Das kann nicht geändert werden.
Aber man kann sich die Form über:
Leistung, wenn Sie so manipulieren, dass Daten, sind Sie besser dran mit
numpy.array
überdf.values
und Aufzeichnung der Spalte Namen in einem Wörterbuch mit integer-Schlüssel.