Pandas Read_CSV报价问题

时间:2016-06-02 10:52:23

标签: python csv pandas dataframe quoting

我有一个看起来像的文件:

'colA'|'colB'
'word"A'|'A'
'word'B'|'B'

我想使用pd.read_csv('input.csv',sep='|', quotechar="'"),但我得到以下输出:

colA    colB
word"A   A
wordB'   B

最后一行不正确,应为word'B B。我该如何解决这个问题?我尝试了各种迭代,但没有一个字能正确读取两行。我需要一些csv阅读专业知识!

2 个答案:

答案 0 :(得分:5)

我认为str.strip需要apply

import pandas as pd
import io

temp=u"""'colA'|'colB'
'word"A'|'A'
'word'B'|'B'"""

#after testing replace io.StringIO(temp) to filename
df = pd.read_csv(io.StringIO(temp), sep='|')

df = df.apply(lambda x: x.str.strip("'"))
df.columns = df.columns.str.strip("'")
print (df)
     colA colB
0  word"A    A
1  word'B    B

答案 1 :(得分:4)

问题的根源是'被定义为引用,并作为常规字符。

你可以逃脱它,例如

'colA'|'colB'
'word"A'|'A'
'word/'B'|'B'

然后使用escapechar:

>>> pd.read_csv('input.csv',sep='|',quotechar="'",escapechar="/")
     colA colB
0  word"A    A
1  word'B    B

您也可以使用:quoting = csv.QUOTE_ALL - 但输出将包含引号字符

>>> import pandas as pd
>>> import csv
>>> pd.read_csv('input.csv',sep='|',quoting=csv.QUOTE_ALL)
     'colA' 'colB'
0  'word"A'    'A'
1  'word'B'    'B'
>>>