pandas read_csv使用sep = None

时间:2017-03-23 17:49:04

标签: python csv pandas delimiter

我有以下单列CSV文件:

id
1
2
3

当我用pandas.read_csv('path/to/csv')读取csv时,它可以正确读取它。

但是,要求我必须接受多个分隔符,因此我的现有代码使用sep=None

阅读上述CSV时,pandas.read_csv('path/to/csv', sep=None)会生成ValueError: Expected 2 fields in line 2, saw 1。显然,它错误地识别分隔符并期望有两列。

任何人都可以建议一种方法,这将允许我继续接受多个分隔符,但也正确处理上面的CSV?使用正则表达式分隔符,例如由于causing pandas to ignore quotations.

,因此无法接受sep=';|,'

1 个答案:

答案 0 :(得分:0)

这是我们最终可以找到的最佳解决方案:

data = csv_file.decode(chardet.detect(csv_file)['encoding'])
dialect = csv.Sniffer().sniff(StringIO(data).readline())
if dialect.delimiter.isalnum():
    dialect.delimiter = ','  
pd.read_csv(StringIO(data), dialect=dialect)

推断如果Sniffer无法检测到分隔符,则它是单行CSV并将分隔符设置为,以允许其被读取。