私は自分のデータの両側に引用符を使用してパンダpandas parse csv with left and right quote charsに読み込んでいますが、改行やいくつかの奇妙な文字もサポートする必要があります。pandas改行でcsvをパーズ
最初の文字列(temp
)は正常に動作しますが、2番目の文字列は正しく解析されません。コメントで概説したように
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
は編集
- それだけで正常に動作し、単一の行にすべてを置きます。 どうすればsed/Awk経由で自動化できますか? awk '{printf("%s ",$0)} END{print ""}' sample.csv
すべて改行を削除し、すべてを1行に連結します。むしろ問題のある改行を削除したいだけです。
awk -F, 'NF < 4 {getline nextline; $0 = $0 nextline} 1' sample.csv
は、すでに通常の改行を削除します。しかし、まだ空白行が追加されています。
手動で改行を削除すると、解析は正常に機能します。 –