2014-10-24 14 views
8

Ich habe einige Daten, die wie folgt aussehen:Import Text mit mehreren Trennzeichen Pandas

c stuff 
c more header 
c begin data   
1 1:.5 
1 2:6.5 
1 3:5.3 

Ich mag es in einen 3-Spalten-Datenrahmen importieren, mit Spalten z.B.

a , b, c 
1, 1, 0.5 
etc 

Ich habe versucht, in den Daten zu lesen als 2 Spalten auf split ‚:‘ und dann auf ‚‘ die erste Spalte zu spalten. Allerdings finde ich es ärgerlich. Gibt es einen besseren Weg, um es direkt beim Import zu sortieren?

derzeit:

data1 = pd.read_csv(file_loc, skiprows = 3, delimiter = ':', names = ['AB', 'C']) 
data2 = pd.DataFrame(data1.AB.str.split(' ',1).tolist(), names = ['A','B']) 

Dies ist jedoch noch komplizierter durch die Tatsache, meine Daten, die einen führenden Platz hat ...

Ich fühle mich wie dies eine einfache Aufgabe sein sollte, aber zur Zeit ich denke Sie können Zeile für Zeile lesen und einige Dateien ersetzen, um die Daten vor dem Import zu bereinigen.

Antwort

19

Eine Möglichkeit könnte die Verwendung der von der Python-Engine zugelassenen Regex-Trennzeichen sein. Zum Beispiel:

>>> !cat castle.dat 
c stuff 
c more header 
c begin data   
1 1:.5 
1 2:6.5 
1 3:5.3 
>>> df = pd.read_csv('castle.dat', skiprows=3, names=['a', 'b', 'c'], 
        sep=' |:', engine='python') 
>>> df 
    a b c 
0 1 1 0.5 
1 1 2 6.5 
2 1 3 5.3 
+0

Das sieht genau so aus, was ich brauchte. Danke – CastleH

+0

Ich fühle mich ein bisschen beschämt das "sep" Argument in den Dokumenten jetzt nicht zu bemerken ...: -/ – CastleH

+0

Warum bekomme ich einen 'ParserError' wenn ich diese Methode benutze? 'pandas.errors.ParserError: Erwartete 29 Felder in Zeile 11, sah 45. Der Fehler könnte möglicherweise darauf zurückzuführen sein, dass die Anführungszeichen ignoriert werden, wenn ein Trennzeichen mit mehreren Zeichen verwendet wird.' – user77005

Verwandte Themen