Ich versuche, eine Tabelle aus einer größeren .txt
Datei in Python zu lesen.Spalten mit pandas.read_csv trennen
Ein Auszug der Daten ist:
2 Network magnitudes:
MLv 2.05 +/- 1.34 7
M 2.05 7 preferred
7 Phase arrivals:
sta net dist azi phase time res wt sta
BMOR EC 0.0 226 P 00:22:31.385 -0.6 M 1.0 BMOR
BREF EC 0.0 347 P 00:22:31.543 -0.5 M 1.0 BREF
BTAM EC 0.0 58 P 00:22:31.796 -0.3 M 1.0 BTAM
BVC2 EC 0.0 26 P 00:22:33.061 0.8 M 1.0 BVC2
BNAS EC 0.1 294 P 00:22:32.871 -0.1 M 1.0 BNAS
SUCR EC 0.1 314 P 00:22:34.610 0.6 M 1.0 SUCR
BRRN EC 0.1 207 P 00:22:34.768 0.4 M 1.0 BRRN
7 Station magnitudes:
sta net dist azi type value res amp per
BMOR EC 0.0 226 MLv 1.48 -0.57 1.20076
ich die Phase Ankünften Tabelle nur wollen und so np.loadtext
und np.genfromtxt
beide fallen kurz aus verschiedenen Gründen (kann einen bug nicht beschäftigen sich mit Zahlen und Strings/enthält, es sei denn geben Sie nur ein Leerzeichen (‘‚) Begrenzungszeichen, die ich hier nicht tun können)
ich habe mit dem pandas.read_csv
fucntion versucht, aber es ist nicht zu erkennen die Begrenzer
a = pd.read_csv(datafileloc, sep='\+s', skiprows=5, skipfooter=3)
produziert:
a
Out[90]:
sta net dist azi phase time res wt sta
0 BMOR EC 0.0 226 P 00:22:31.385 -0....
1 BREF EC 0.0 347 P 00:22:31.543 -0....
2 BTAM EC 0.0 58 P 00:22:31.796 -0....
3 BVC2 EC 0.0 26 P 00:22:33.061 0....
4 BNAS EC 0.1 294 P 00:22:32.871 -0....
5 SUCR EC 0.1 314 P 00:22:34.610 0....
6 BRRN EC 0.1 207 P 00:22:34.768 0....
, die von gut auseinander sieht, dass sie jeweils eine Saite sind, und es hat nicht die Aufmerksamkeit auf den weißen Raum delimiters bezahlt:
a.values
Out[89]:
array([['BMOR EC 0.0 226 P 00:22:31.385 -0.6 M 1.0 BMOR'],
['BREF EC 0.0 347 P 00:22:31.543 -0.5 M 1.0 BREF'],
['BTAM EC 0.0 58 P 00:22:31.796 -0.3 M 1.0 BTAM'],
['BVC2 EC 0.0 26 P 00:22:33.061 0.8 M 1.0 BVC2'],
['BNAS EC 0.1 294 P 00:22:32.871 -0.1 M 1.0 BNAS'],
['SUCR EC 0.1 314 P 00:22:34.610 0.6 M 1.0 SUCR'],
['BRRN EC 0.1 207 P 00:22:34.768 0.4 M 1.0 BRRN']], dtype=object)
Linien mit getrennt werden können list(a.values[0])[0].split()
, aber das wird dann reorganisieren, um einzelne Spalten zu erhalten. Ich möchte pandas.read_csv
nur erkennen, dass sie getrennt sind, so dass ich einzelne Spalten extrahieren kann (ziemlich effizient sein wird wichtig sein, sobald ich es skalieren)
Wo gehe ich falsch?
Ich bin nicht sicher, ob Sie dies als Tippfehler schließen (Sie brauchen '\ s +', nicht '\ + s') oder als ein Duplikat von [this] (http://stackoverflow.com/questions/15026698/how-to-make-separator-in-lesen-csv-flexibler-wrt-whitespace). – DSM
Hey @DSM - Danke! Ich habe es gerade getestet und du hast recht, es ist ein Tippfehler. Allerdings habe ich es direkt aus der Dokumentation genommen, der Tippfehler kommt von dort: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html (unter delim_whitespace-Parameter) – mjp
hast du recht! Ich werde dafür sorgen, dass das behoben wird. :-) – DSM