Vor einer Weile habe ich zitiert auf beiden Seiten meiner Daten und lesen Sie es in Pandas pandas parse csv with left and right quote chars jetzt muss ich auch Zeilenumbrüche und einige seltsame Zeichen zu unterstützen.Pandas analysieren csv mit Zeilenumbrüchen
Minimum Beispiel unten, die erste Zeichenfolge (temp
) wird gut funktionieren, aber die zweite wird nicht richtig analysieren.
import pandas as pd
import os
from pandas.compat import StringIO
temp=u"""<first>$$><$$<second>$$><$$<first>
<foo>$$><$$<bar>$$><$$<baz>"""
temp=u"""<first>$$><$$<second>$$><$$<third>
<foo>$$><$$<bar>$$><$$<baz>
<foo>$$><$$<Green; kkkk 101; aaaa, bbb; [foo<1>>aaa<123>>xxx<1>>zzz<1.17989207 | 18187681 | asdf |>>
;sdf{
}
;ADD{
]>$$><$$<baz>"""
big_df = pd.read_csv(StringIO(temp),
encoding='utf8',
sep='\$\$><\$\$',
decimal=',',
engine='python') # we cant use pandas optimized C parser due to our special delimiters.
big_df.iloc[:, -1] = big_df.iloc[:, -1].str.replace('\$\$>$', '')
big_df.iloc[:, -1] = big_df.iloc[:, -1].str.replace('\$\$>$', '')
big_df = big_df.replace(['^<', '>$'], ['', ''], regex=True)
big_df.columns = big_df.columns.to_series().replace(['^<', '>$', '>\$\$'], ['', '', ''], regex=True)
big_df
bearbeiten
Wie im Kommentar skizziert - wenn alle auf eine einzige Zeile setzen es ganz gut funktioniert. Wie könnte ich das vielleicht über sed/Awk automatisieren? awk '{printf("%s ",$0)} END{print ""}' sample.csv
wird alle neue Zeilen entfernen und alles in einer einzigen Zeile verketten. Ich möchte nur die problematischen Zeilenumbrüche entfernen.
awk -F, 'NF < 4 {getline nextline; $0 = $0 nextline} 1' sample.csv
wird bereits die normalen Zeilenumbrüche entfernen. Aber da sind noch die zusätzlichen Leerzeilen.
Wenn ich die Zeilenumbrüche manuell entfernen, funktioniert das Parsing problemlos. –