高效地将CSV的最后“ n”行读入DataFrame

发布于 2021-01-29 17:53:08

一些方法可以做到这一点:

  1. 阅读整个CSV,然后使用 df.tail
  2. 以某种方式反转文件(对大文件执行此操作的最佳方法是什么?),然后使用nrows参数读取
  3. 以某种方式在CSV中找到行数,然后使用skiprows并读取所需的行数。
  4. 也许做块读取丢弃初始块(尽管不确定如何工作)

可以用更简单的方法吗?如果没有,那三者中哪一个更受欢迎?为什么?

关注者
0
被浏览
42
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    我不认为熊猫会提供一种方法来实现这一目标read_csv

    也许最整洁(一次通过)是使用collections.deque

    from collections import deque
    from StringIO import StringIO
    
    with open(fname, 'r') as f:
        q = deque(f, 2)  # replace 2 with n (lines read at the end)
    
    In [12]: q
    Out[12]: deque(['7,8,9\n', '10,11,12'], maxlen=2)
             # these are the last two lines of my csv
    
    In [13]: pd.read_csv(StringIO(''.join(q)), header=None)
    

    另一个值得尝试的选择是获取第一遍的行数,然后再次读取文件,使用read_csv…跳过该行数(减去n)。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看