2017-07-13 6 views
0

Ich bin ziemlich neu zu Pandas, und müssen ein 3D-Array von Tupeln aus einer Datendatei importieren. In der Datei werden die Daten als so formatiert:3D Pandas DataFrame von csv

[[(1.1, 1.2), (1.3, 1.4)], [(1.5, 1.6), (1.7, 1.8)], [(1.9, 1.10), (1.11, 1.12)], [(1.13, 1.14), (1.15, 1.16)]] 
[[(2.1, 2.2), (2.3, 2.4)], [(2.5, 2.6), (2.7, 2.8)], [(2.9, 2.10), (2.11, 2.12)], [(2.13, 2.14), (2.15, 2.16)]] 
[[(3.1, 3.2), (3.3, 3.4)], [(3.5, 3.6), (3.7, 3.8)], [(3.9, 3.10), (3.11, 3.12)], [(3.13, 3.14), (3.15, 3.16)]] 

Ich mag wäre in der Lage sein, dies in einem Datenrahmen zu importieren, so dass (in diesem Beispiel) die Dimensionalität würde 3x4x2 (mit einem anderen x2, wenn Sie Ich möchte die Dimensionen der Tupel zählen, obwohl diese nicht notwendigerweise ihre eigene Dimension haben müssen, solange ich auf sie als Tupel zugreifen kann.

In Wirklichkeit ist mein Datensatz viel größer als dieser (mit Abmessungen von etwa 13000x2000x2), so würde ich gerne manuelle Bearbeitung auf ein Minimum beschränken, obwohl ich in der Lage sein sollte, wie die Daten zu ändern ist in der Datei mit einigen einfachen Skripten formatiert, wenn ein anderes Format helfen würde.

+0

Haben Sie darüber nachgedacht Panels mit? https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Panel.html – duncster94

+0

Wie @Diego Agher sagte, gibt es nicht so etwas wie einen 3D-Datenrahmen, was existiert, ist "Panel", was ist sowas ähnliches. Das Problem ist meiner Meinung nach, dass Sie nicht angeben, wie Sie Ihre Daten lesen möchten und in welchem ​​Format die Datei, aus der Sie sie lesen, ist. Wenn Sie hinzufügen, dass wir vielleicht hilfreicher sein können – gionni

+0

Das Format der Datei ist, was oben gezeigt wird (in einer ansonsten unverschlüsselten Datei). Momentan benutze ich 'read_csv' nur, um die Daten einzulesen, obwohl das offensichtlich nicht funktioniert, und ich bin mir nicht sicher, wie ich das Format der Datei weiter spezifizieren würde als nur den Begrenzer. Ich werde versuchen, in 'panels' zu schauen, um zu sehen, ob sie funktionieren könnten und welche Funktionen aus meiner Datendatei in ein Panel lesen können. – jacaseyclyde

Antwort

0

Selbst ‚eval‘ ist ein gefährliches Werkzeug, um es hier einen Einzeiler gibt die Daten zu sammeln:

with open('data.csv') as f: a=np.array([eval(x) for x in f.readlines()]) 

Kontrolle:

In [59]: a.shape 
Out[59]: (3, 4, 2, 2) 
+0

Das hat funktioniert! Dauert eine Weile, aber das ist in Ordnung. Vielen Dank! – jacaseyclyde

0

Es gibt keine mehrdimensionalen dataframe mit pandas. Sie könnten an mehrere dataframes denken und sie mit einer zusätzlichen Spalte als id miteinander in Beziehung setzen.

Oder Sie könnten auch Ihre 3D-Array dataframe mit mehreren Spalten abflachen:

  • Ihre Reihen der Beobachtung wäre, in diesem Fall 3
  • Ihre Spalten der abflachen Ausgang 4 x 2 = 8 würde

könnten Sie numpy verwenden, um neu zu gestalten:

new_array = numpy.reshape(array, (3,8))