前段時間我在我的數據兩邊用引號把它讀入pandas parse csv with left and right quote chars現在我還需要支持換行符和一些奇怪的字符。大熊貓用換行符解析csv
下面的最小樣本,第一個字符串(temp
)將工作得很好,但第二個字符串不會正確解析。
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
將刪除全部新行並將所有內容連接成一行。我寧願只想刪除有問題的換行符。
awk -F, 'NF < 4 {getline nextline; $0 = $0 nextline} 1' sample.csv
已經刪除了正常的換行符。但仍然有額外的空白行。
當我手動刪除換行符時,解析工作得很好。 –