pandas使用左右引号字符解析csv

时间:2017-03-06 13:38:30

标签: python csv parsing pandas

我正在尝试读取pandas中的文件,其结构如下

<first>$$><$$<second>$$><$$<first>$$>
<foo>$$><$$<bar>$$><$$<baz>$$>

使用pd.read_csv('myflie.csv', encoding='utf8', sep='$$><$$', decimal=',') 将无法产生有意义的结果。所有数据都被读入一个列中,并且不会提取引号。

1 个答案:

答案 0 :(得分:3)

您需要$转义\,因为它被读作正则表达式(字符串结尾):

  

(分隔符&gt; 1个字符,不同于&#39; \ s +&#39;被解释为正则表达式)

import pandas as pd
from pandas.compat import StringIO


temp=u"""<first>$$><$$<second>$$><$$<first>$$>
<foo>$$><$$<bar>$$><$$<baz>$$>"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp), 
                 encoding='utf8', 
                 sep='\$\$><\$\$', 
                 decimal=',', 
                 header=None, 
                 engine='python')

print (df)
         0         1           2
0  <first>  <second>  <first>$$>
1    <foo>     <bar>    <baz>$$>

然后从最后一栏删除$$>可以使用replace(为字符串结尾添加&):

df.iloc[:, -1] = df.iloc[:, -1].str.replace('\$\$>$', '')
print (df)
         0         1        2
0  <first>  <second>  <first>
1    <foo>     <bar>    <baz>

并删除引用:

df = df.replace(['^<', '>$'], ['', ''], regex=True)
print (df)
       0       1      2
0  first  second  first
1    foo     bar    baz

两者一起取代:

df = df.replace(['^<', '>$', '>\$\$'], ['', '', ''], regex=True)
print (df)
       0       1      2
0  first  second  first
1    foo     bar    baz