[英]pandas read_csv incorrectly reading number of columns with sep=None
我有以下单列CSV文件:
id
1
2
3
当我使用pandas.read_csv('path/to/csv')
读取pandas.read_csv('path/to/csv')
它可以正确读取它。
但是,要求表明我必须接受多个定界符,因此我的现有代码使用sep=None
。
读取上述CSV时, pandas.read_csv('path/to/csv', sep=None)
会产生ValueError: Expected 2 fields in line 2, saw 1
。 显然,它错误地标识了分隔符并期望有两列。
谁能提出解决此问题的方法,让我继续接受多个定界符,但也能正确处理上述CSV? 使用正则表达式定界符(例如sep=';|,'
是不可接受的,因为它会导致大熊猫忽略引号。
这是我们最终可以找到的最佳解决方案:
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和分隔符设置,
使得它能够被读取。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.