当前位置: 首页 > 面试题库 >

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

茅高卓
2023-03-14
问题内容

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

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

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


问题答案:

我不认为熊猫会提供一种方法来实现这一目标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)。



 类似资料:
  • 如何才能从pandas数据帧中只写入前N行或从P行到Q行到csv而不首先对df进行子化?由于内存问题,我无法对要导出的数据进行子集。 我正在考虑一个函数,它逐行写入csv。 谢谢你

  • 问题内容: 下面的Go代码读取10,000条记录的CSV(时间戳和浮点数),对数据进行一些操作,然后将原始值以及的附加列写入到另一个CSV中。但是,它的运行速度非常慢(例如,数小时,但大部分时间是),我很好奇我可以处理的CSV读取/写入是否效率低下。 我正在寻求帮助,以使此CSV读/写模板代码尽快。对于此问题的范围,我们不必担心该方法。 问题答案: 您先将文件加载到内存中,然后再对其进行处理,这对

  • 问题内容: 我想读取一个非常大的文件的最后n行,而不使用Java将整个文件读入任何缓冲区/内存区域。 我环顾了JDK API和Apache Commons I / O,但无法找到适合此目的的一个。 我在想UNIX中使用tail或更少的方式。我认为他们不会加载整个文件,然后显示文件的最后几行。在Java中也应该有类似的方法。 问题答案: 如果使用,则可以使用和到达文件末尾附近的特定点,然后从那里开始

  • 我是python新手。我在使用csv文件时遇到问题。这是一个有12行标题的文件,在开始数据之后。我必须从列中读取一些数据(这是可以的),在详细说明之后,我必须向同一文件中添加一列,每行中都有一个值,但第一列中没有任何id,该列必须从第13行开始,而不是从第一行开始。 我试过用熊猫图书馆但不管用 其中,package是列的名称(但我也知道索引),package是字符串数组(我必须编写的元素)。这段代

  • 本文向大家介绍Python实现读取文件最后n行的方法,包括了Python实现读取文件最后n行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实现读取文件最后n行的方法。分享给大家供大家参考,具体如下: 以上处理和日志文件格式为 读取最后一行: 更多关于Python相关内容感兴趣的读者可查看本站专题:《Python文件与目录操作技巧汇总》、《Python文本文件操作技巧汇总

  • 我使用papa parse读取远程托管的csv文件。问题是头行不在文件的第一行,而是文件以几行空行开始,然后是头行,然后是所有数据。我正在努力让papa parse忽略文件开头的空行。有什么我遗漏的吗?我希望避免加载整个文件(只需要6000多行中的前几行)。