【发布时间】:2020-08-14 19:10:08
【问题描述】:
我有一个 csv 文件,其中 , 分隔我想用 pandas 读取的列,即 df = pd.read_csv("myfile.csv",sep=',',dtype=str,encoding='utf-8')。列有多种类型,但我想将所有内容都读取为字符串。以下形式的一行会导致读者在该行中看到比预期更多的列:
# column 1, column 2, column 3, ...
46745,"\\"\\"\\"blabla\\"\\" a, b bli\\"\\"more bla.\\"\\" bl blu \\"\\"bli bla blub\\"\\"\\"","something else",...
有些字段,如这里的第二列和第三列,是用双引号引起来的。第二个字段与其他双引号字段的不同之处在于它包含多个引号,因此当解析器到达, 时,它没有意识到它实际上仍然在它应该识别的引号内,因为最后的引号字符应该后跟分隔符。有趣的是,当您传递engine='python' 时,解析器实际上识别出了这一点,但并没有得出引用还没有完成的结论,而是抛出了错误',' expected after '"'。
我尝试了关键字参数quoting、quotechar、sep 和engine 的各种组合。一切都无济于事。
编辑:根据要求提供示例
import io
s = 'column1,column2,column3\n3463,hello,"more, stuff"\n46745,"\\"\\"\\"blabla\\"\\" a, b bli\\"\\"more bla.\\"\\" bl blu \\"\\"bli bla blub\\"\\"\\"","something else"'
df = pd.read_csv(io.StringIO(s),sep=',',dtype=str,encoding='utf-8')
如果你注释掉最后一行,它会起作用。
【问题讨论】:
-
您能否分享具有有效列数的数据样本?