Python Pandas中的引擎read_csv

16
2个回答

16

pd.read_csv的文档记录了'c'(默认)和'python'引擎之间的具体区别。名称表示解析器编写的语言。具体而言,文档指出:

在可能的情况下,pandas使用C解析器(指定为engine='c'),但如果指定了不支持C的选项,则可能会退回到Python。

以下是您应注意的主要差异(截至v0.23.4):

  • 'c'更快,而'python'目前更全面。
  • 'python'支持skipfooter,而'c'不支持。
  • 'python'支持灵活的sep,除了单个字符之外还包括正则表达式,而'c'不支持。
  • 'python'支持sep=Nonedelim_whitespace=False,这意味着它可以自动检测分隔符,而'c'不支持。
  • 'c'支持float_precision,而'python'不支持(或不必要)。

版本说明:

  • dtype在'python' v0.20.0+中支持。
  • delim_whitespace在'python' v0.18.1+中支持。

请注意随着功能的发展,上述内容可能会发生变化。如果您在后续版本中看到意外行为,请检查IO工具(Text、CSV、HDF5等)


1
对于一个1.2 GB的csv文件,engine='python'c更快。为什么会这样? - seralouk
1
@serafeim,没有你的CSV文件,很难判断。也许有特定的内容或参数组合,在engine='python'时更有效率。但一般来说,'c'更高效,而'python'则更具有完整的功能。 - jpp
2
这是文件链接:https://filebin.net/fkyil2m5yhvr1dbh 任何建议都非常感谢。“c”需要很长时间,而“python”运行更快。 - seralouk

0

我的 timeitpandasengine 选项上。是的!cpython 快得多,但令人惊讶的是,不使用引擎更快。

以下是导入相同数据时的结果:

%timeit df = pd.read_csv(data_loc,engine='c')
4.38 s ± 423 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit df = pd.read_csv(data_loc,engine='python')
17.2 s ± 1 s per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit df = pd.read_csv(data_loc) 
4.02 s ± 58.5 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

print(df.shape)
(1116077, 24)

2
你总是使用一个引擎,默认是“c”,因此时间相似。 - dsz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接