我有一个函数可以读取和处理多个数据帧中的
*.csv
文件。
但是,并非所有
.csv
文件都具有相同的分隔符。有没有办法检测 .csv
文件具有哪种类型的分隔符,然后在 Pandas 的 read_csv()
函数中使用它?
df = pd.read_csv(path, sep = 'xxx',header = None, index_col = 0)
更新
事实上,使用
engine='python'
作为read_csv
的参数。它将尝试自动检测正确的分隔符。
sepstr,默认‘,’
要使用的分隔符。如果 sep 为 None,则 C 引擎无法自动检测分隔符,但 Python 解析引擎可以,这意味着将使用后者并通过 Python 内置的嗅探工具 csv.Sniffer 自动检测分隔符。另外,长度超过1个字符且与'\s+'不同的分隔符将被解释为正则表达式,也会强制使用Python解析引擎。请注意,正则表达式分隔符很容易忽略引用的数据。正则表达式示例:' '.
csv.Sniffer
:
import csv
def find_delimiter(filename):
sniffer = csv.Sniffer()
with open(filename) as fp:
delimiter = sniffer.sniff(fp.read(5000)).delimiter
return delimiter
演示:
>>> find_delimiter('data.csv')
','
>>> find_delimiter('data.txt')
' '
正如 Reda El Hail 之前在评论中所说,设置参数
sep = None
,如下所示:
pandas.read_csv('data.csv',sep=None)
如果您使用 lib awswrangler 读取 s3 中的 csv 文件,您可以执行类似的操作:
awswrangler.s3.read_csv('s3://bucket/prefix', sep = None)