2016-12-26 5 views
0

Ich habe Probleme mit Pandas.read_csvPandas.read_csv Fehler Tokenisieren Daten

Ich möchte diese Textdatei (siehe unten) lesen Wenn ich diese Daten übernehmen und kopieren Sie sie in Excel> Text in Spalten> abgegrenzt durch "Space" gibt es mir genau die Ausgabe, nach der ich suche.

Ich habe eine Reihe von verschiedenen Möglichkeiten ausprobiert, ich dachte, dass die RegEx für mehrere Räume tun würde, würde den Trick tun, aber ich habe es versäumt, es zum Laufen zu bringen.

Ich versuche, diesen Code:

petrelTxt = pd.read_csv(petrelfile, sep = ' ', header = None) 

und es gibt mir den Fehler

CParserError: Error tokenizing data. C error: Expected 6 fields in line 2, saw 17 

Als ich die "sep = '\ s +'" Versuchen Sie, es es weiter unten in der Datei macht, funktioniert aber immer noch nicht.

petrelTxt = pd.read_csv(petrelfile, sep = '\s+', header = None) 


CParserError: Error tokenizing data. C error: Expected 5 fields in line 3, saw 6 

Dies ist die ursprüngliche txt-Datei:

# WELL TRACE FROM PETREL 
# WELL NAME:    ZZ-0113 
# WELL HEAD X-COORDINATE: 9999999.00000000 (m) 
# WELL HEAD Y-COORDINATE: 9999999.00000000 (m) 
# WELL KB:    159.00000000 (ft) 
# WELL TYPE:    OIL 
# MD AND TVD ARE REFERENCED (=0) AT KB AND INCREASE DOWNWARDS 
# ANGLES ARE GIVEN IN DEGREES 
# XYZ TRACE IS GIVEN IN COORDINATE SYSTEM WGS_1924_UTM_Zone_42N 
# AZIMUTH REFERENCE TRUE NORTH 
# DX DY ARE GIVEN IN GRID NORTH IN m-UNITS 
# DEPTH (Z, TVD) GIVEN IN ft-UNITS 
#====================================================================================================================================== 
     MD    X    Y    Z   TVD   DX   DY   AZIM   INCL   DLS 
#====================================================================================================================================== 
0.0000000000 999999.00000 9999999.0000 159.00000000 0.0000000000 0.0000005192 -0.000000000 1.3487006929 0.0000000000 0.0000000000 
132.00000000 999999.08032 9999999.9116 27.000774702 131.99922530 0.0803153923 -0.088388779 139.08870069 0.3400000000 0.2575757504 
221.00000000 999999.19115 9999999.8017 -61.99775149 220.99775149 0.1911487882 -0.198290891 132.93870069 0.3200000000 0.0456726104 
+0

es ist nicht korrekt CSV-Datei, weil Sie Kommentare haben. Wie ich mich erinnere, hat 'read_csv' die Möglichkeit, einige Zeilen zu überspringen. – furas

+0

lesen Sie doc: [read_csv] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html) es hat die Option, einige Zeilen zu überspringen und einen Kommentar zu erkennen - Sie müssen 'comment verwenden = "#" ' – furas

Antwort

3

Versuchen comment="#"

Beispiel io Modul Datei

data = '''# WELL TRACE FROM PETREL 
# WELL NAME:    ZZ-0113 
# WELL HEAD X-COORDINATE: 9999999.00000000 (m) 
# WELL HEAD Y-COORDINATE: 9999999.00000000 (m) 
# WELL KB:    159.00000000 (ft) 
# WELL TYPE:    OIL 
# MD AND TVD ARE REFERENCED (=0) AT KB AND INCREASE DOWNWARDS 
# ANGLES ARE GIVEN IN DEGREES 
# XYZ TRACE IS GIVEN IN COORDINATE SYSTEM WGS_1924_UTM_Zone_42N 
# AZIMUTH REFERENCE TRUE NORTH 
# DX DY ARE GIVEN IN GRID NORTH IN m-UNITS 
# DEPTH (Z, TVD) GIVEN IN ft-UNITS 
#====================================================================================================================================== 
     MD    X    Y    Z   TVD   DX   DY   AZIM   INCL   DLS 
#====================================================================================================================================== 
0.0000000000 999999.00000 9999999.0000 159.00000000 0.0000000000 0.0000005192 -0.000000000 1.3487006929 0.0000000000 0.0000000000 
132.00000000 999999.08032 9999999.9116 27.000774702 131.99922530 0.0803153923 -0.088388779 139.08870069 0.3400000000 0.2575757504 
221.00000000 999999.19115 9999999.8017 -61.99775149 220.99775149 0.1911487882 -0.198290891 132.93870069 0.3200000000 0.0456726104''' 

import pandas as pd 
import io 

f = io.StringIO(data) 

df = pd.read_csv(f, comment="#", sep='\s+') 

print(df.columns) 
print(df.head()) 

Ergebnis zu emulieren:

Index(['MD', 'X', 'Y', 'Z', 'TVD', 'DX', 'DY', 'AZIM', 'INCL', 'DLS'], dtype='object') 

     MD    X    Y   Z   TVD   DX \ 
0 0.0 999999.00000 9.999999e+06 159.000000 0.000000 5.192000e-07 
1 132.0 999999.08032 1.000000e+07 27.000775 131.999225 8.031539e-02 
2 221.0 999999.19115 1.000000e+07 -61.997751 220.997751 1.911488e-01 

     DY  AZIM INCL  DLS 
0 -0.000000 1.348701 0.00 0.000000 
1 -0.088389 139.088701 0.34 0.257576 
2 -0.198291 132.938701 0.32 0.045673 
+0

petrelTxt = pd.read_csv (petrelfile, comment =" # ", sep = '\ s +', header = Keine) Hi, danke, ja, ich habe den Kommentar = '#' verwendet und habe einen Output bekommen Ich brauche. Aber ich muss noch in der Lage sein, die Kopfdaten einzugeben und Informationen daraus zu extrahieren ..... danke – brandog

+0

Verwenden Sie 'names = []' für benutzerdefinierte Header – MYGz

+0

Stellen Sie eine neue Frage zu SO. – furas

Verwandte Themen