我正在尝试读取pandas中的文件,其结构如下
<first>$$><$$<second>$$><$$<first>$$>
<foo>$$><$$<bar>$$><$$<baz>$$>
使用pd.read_csv('myflie.csv', encoding='utf8', sep='$$><$$', decimal=',')
将无法产生有意义的结果。所有数据都被读入一个列中,并且不会提取引号。
答案 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