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 
  • Auflistung aller Muster, die ein Regex entspricht
  • Warum produzieren diese beiden Python-Regexe unterschiedliche Ergebnisse?
  • Analysieren von halbstrukturierten Json-Daten (Python / R)
  • Python Regex für Bindestriche
  • Wie python und das regex modulieren umgekehrt
  • Wie kann ich in Python eine Liste verweisen?
  • Regex String stimmt nicht überein
  • Wie kann ich alle Platzhalter für str.format in einer Python-String mit einem Regex finden?
  • Python ist die beste Programmiersprache der Welt.