Python 使用pd.read\u CSV自动检测CSV文件中的分隔符

Python 使用pd.read\u CSV自动检测CSV文件中的分隔符,python,pandas,csv,delimiter,Python,Pandas,Csv,Delimiter,read_csv是否有自动检测分隔符的方法?numpy的genfromtxt就是这样做的。我的文件包含单空格、双空格和制表符作为分隔符的数据。genfromtext()解决了这个问题,但比pandas的read\u csv慢。有什么想法吗?选项1 使用delim\u whitespace=True df = pd.read_csv('file.csv', delim_whitespace=True) 选项2 将正则表达式传递给sep参数: df = pd.read_csv('file.csv

read_csv是否有自动检测分隔符的方法?numpy的genfromtxt就是这样做的。我的文件包含单空格、双空格和制表符作为分隔符的数据。genfromtext()解决了这个问题,但比pandas的read\u csv慢。有什么想法吗?

选项1

使用
delim\u whitespace=True

df = pd.read_csv('file.csv', delim_whitespace=True)

选项2

将正则表达式传递给
sep
参数:

df = pd.read_csv('file.csv', sep='\s+')
这相当于第一个选项



为了更好地控制,我从python项目中使用了一个名为detect_delimiter的python模块。看见它已经存在一段时间了。与所有代码一样,您应该在部署之前使用解释器进行测试。我已经测试了python版本3.8.5

请参阅下面的代码示例,其中自动检测到分隔符,并且 分隔符是从方法的输出中定义的。然后,代码读取CSV文件 使用sep=分隔符。我已经使用以下分隔符进行了测试,尽管其他分隔符应该可以工作:|

它不适用于多字符分隔符,例如“,”

小心!此方法无法检测格式错误的CSV文件。在这种情况下 其中输入文件包含这两个文件;并且,该方法返回,作为检测到的分隔符

from detect_delimiter import detect
import pandas as pd

with open(security_rule_file.csv) as myfile:
    firstline = myfile.readline()
myfile.close()
deliminter = detect(firstline)

records = pd.read_csv(security_rule_file.csv, sep = delimiter)

精彩的。选项#2也适用于csv文件。如果存在无法将一个字段与另一个字段分隔开的空白,则这两个选项都不起作用。例如,如果您有一个以制表符分隔的文件,并且字段中存在空格,那么您几乎必须执行
sep='\t'
@adriankeester,这是正确的,但问题涉及数字数据,因此我们应该没问题。但是字符串数据是需要注意的。如果能更清楚地说明我们只讨论数字数据,或者能为一般的csv数据提供解决方案,这将是非常有用的