【问题标题】:Pandas read_csv (quickly!) with non-regex, multi-char sep带有非正则表达式、多字符 sep 的 Pandas read_csv(快点!)
【发布时间】:2020-12-30 01:21:24
【问题描述】:

我经常收到一个带有, (逗号空格)分隔符的文件,我想将其读入熊猫数据框。简单的pd.read_csv(fname, header=0, sep=', ') 读起来很好,但在我的文件上比等效的sep=',' 慢约8 倍,因为多字符sep 看起来像一个正则表达式并强制python 引擎。

什么是读取具有非正则表达式、多字符分隔符的文件而不需要回退到 python 引擎的好方法(主要指标:快速)?我当前的解决方案(发布在下面)基本上首先在文件上运行s/, /,/g,但这需要两次传递文件。有没有没有这个缺点的首选解决方案?

【问题讨论】:

    标签: python pandas file-io


    【解决方案1】:

    df = pd.read_csv(fname, skipinitialspace=True) 用作:

    skipinitialspacebool, default False
    Skip spaces after delimiter.
    

    推荐人:Dealing with extra white spaces while reading CSV in Pandas

    【讨论】:

    • 太棒了,对我来说有点 RTFM,非常感谢!非常适合我的用例,但我会留下我的答案,以防其他人有非空格 mutli-char sep。
    【解决方案2】:

    我目前的解决方案是在调用 read_csv 之前将分隔符简单地替换为单字符。

    from io import StringIO
    def read_comma_space(fname):
        with open(fname, 'r') as f:
            text = f.read().replace(', ', ',')
        s = StringIO(text)
        return pd.read_csv(s, header=0, sep=',')
    

    这可以使用 C 引擎,但必须对文件进行多次传递。与文件的基线读取 (read_csv(fname, header=0, sep=',')) 相比,此解决方案在我的测试中增加了大约 50% 的总执行时间。这比 python 引擎基线的约 8 倍执行时间要好得多。

    【讨论】:

      猜你喜欢
      • 2021-08-27
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多