前段时间我在数据的两边都使用了引号,现在将它读入pandas pandas parse csv with left and right quote chars,我还需要支持换行符和一些奇怪的字符。
下面的最小样本,第一个字符串(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
已经删除了正常的换行符。但仍然有额外的空白行。
答案 0 :(得分:1)
所以你的真实&#34;换行符标有$$>\n
。将您的文件读入字符串,将$$>\n
替换为临时内容,删除所有剩余的换行符,重新插入&#34;真实&#34;新行,然后传递给read_csv()。
temp = temp.replace('$$>\n', '%%NEWLINE%%').replace('\n','').replace('%%NEWLINE%%', '\n')
big_df = pd.read_csv(StringIO(temp), ...)