Pandas CSV mit Stringbegrenzern über Regex lesen

Ich versuche, eine seltsam formatierte Textdatei in einen Pandas DataFrame zu importieren. Zwei Beispiellinien sind unten:

LOADED LANE 1 MAT. TYPE= 2 LEFFECT= 1 SPAN= 200. SPACE= 10. BETA= 3.474 LOADEFFECT 5075. LMAX= 3643. COV= .13 LOADED LANE 1 MAT. TYPE= 3 LEFFECT= 1 SPAN= 200. SPACE= 10. BETA= 3.515 LOADEFFECT10009. LMAX= 9732. COV= .08 

Zuerst habe ich folgendes versucht:

 df = pd.read_csv('beta.txt', header=None, delim_whitespace=True, usecols=[2,5,7,9,11,13,15,17,19]) 

Dies schien gut zu funktionieren, wurde aber verwirrt, wenn es die oben genannte Beispielzeile trifft, wo es keinen Whitespace nach der LOADEFFECT String gibt (evtl. müssen Sie ein bisschen richtig scrollen, um es im Beispiel zu sehen). Ich habe ein Ergebnis wie:

 632 1 2 1 200 10 3.474 5075. 3643. 0.13 633 1 3 1 200 10 3.515 LMAX= COV= NaN 

Dann habe ich beschlossen, einen regulären Ausdruck zu verwenden, um meine Trennzeichen zu definieren. Nach vielen Test- und Fehlerläufen (ich bin kein Experte in Regex), gelang es mir, mit der folgenden Zeile nah zu kommen:

 df = pd.read_csv('beta.txt', header=None, sep='/s +|LOADED LANE|MAT. TYPE=|LEFFECT=|SPAN=|SPACE=|BETA=|LOADEFFECT|LMAX=|COV=', engine='python') 

Das funktioniert fast, aber schafft eine NaN Säule aus irgendeinem Grund am Anfang:

 632 NaN 1 2 1 200 10 3.474 5075 3643 0.13 633 NaN 1 3 1 200 10 3.515 10009 9732 0.08 

An dieser Stelle denke ich, ich kann diese erste Spalte einfach löschen und damit weggehen. Allerdings frage ich mich, was wäre der richtige Weg, um die Regex, um korrekt analysieren diese Textdatei in einem Schuss. Irgendwelche Ideen? Ansonsten bin ich sicher, dass es eine intelligentere Möglichkeit gibt, diese Textdatei zu analysieren. Ich würde mich freuen, Ihre Empfehlungen zu hören.

Vielen Dank!

One Solution collect form web for “Pandas CSV mit Stringbegrenzern über Regex lesen”

 import re import pandas as pd import csv csvfile = open("parsing.txt") #open text file reader = csv.reader(csvfile) new_list=[] for line in reader: for i in line: new_list.append(re.findall(r'(\d*\.\d+|\d+)', i)) table = pd.DataFrame(new_list) table # output will be pandas DataFrame with values 
  • Extrahieren von Text in XML-Tags mit Python (unter Vermeidung von <p> -Tags)
  • Python regex findall <span>
  • Regex, um alle Sätze von Text zu finden?
  • Wie benutzt man reguläre Ausdrücke?
  • Python reguläre Ausdrücke - wie man mehrere Gruppen aus einem Wildcard-Ausdruck erfassen kann?
  • Python 3 regulären Ausdruck zu finden multiline Kommentar
  • REGEX-String und entkommenes Zitat
  • Erweitere bestimmte Teilstrings elegant in einer größeren Saite in Python
  • Extrahiere einen String zwischen doppelten Anführungszeichen
  • Python regexes: Wie man auf mehrere Spiele einer Gruppe zugreift?
  • Unterschied zwischen zwei regulären Ausdrücken: [abc] + und ([abc]) +
  • Python ist die beste Programmiersprache der Welt.