pandas read_csv 使用 sep=None 错误地读取列数
pandas read_csv incorrectly reading number of columns with sep=None
我有以下单列 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 文件吗?使用正则表达式定界符,例如sep=';|,'
不可接受,因为 causing pandas to ignore quotations.
这是我们最终找到的最佳解决方案:
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 并且将分隔符设置为 ,
允许读取它。
我有以下单列 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 文件吗?使用正则表达式定界符,例如sep=';|,'
不可接受,因为 causing pandas to ignore quotations.
这是我们最终找到的最佳解决方案:
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 并且将分隔符设置为 ,
允许读取它。