我在使用Pandas读取制表符分隔文件时遇到了问题。
所有单元格值都有双引号,但对于某些行,有一个额外的双引号会破坏整个过程。例如:
Column A Column B Column C
"foo1" "121654" "unit"
"foo2" "1214" "unit"
"foo3" "15884""
我得到的错误是:错误标记数据。 C错误:预计行8355中的31个字段,见58
我使用的代码是:
csv = pd.read_csv(file, sep='\t', lineterminator='\n', names=None)
并且它适用于其余文件,但不适用于出现此额外双引号的文件。
答案 0 :(得分:1)
您可以执行预处理步骤来修复报价问题:
with open(file, 'r') as fp:
text = fp.read().replace('""', '"')
with open(file, 'w') as fp:
fp.write(text)
答案 1 :(得分:1)
如果您无法更改错误输入,最好的方法是将输入文件读入io.StringIO
对象,替换双引号,然后将此类文件对象传递给pd.read
(它支持文件名和类文件对象)
这样您就不必创建临时文件或更改输入数据。
import io
with open(file) as f:
fileobject = io.StringIO(f.read().replace('""','"'))
csv = pd.read_csv(fileobject, sep='\t', lineterminator='\n', names=None)