繁体   English   中英

如何在python上读取csv,tp得到一个dataframe,但是每3行只有一行?

[英]How to read csv on python, tp get a dataframe, but only one row every 3 rows?

我有一个非常大的 csv 文件。 我想在 dataframe 中每 3 行获取一行。这或多或少类似于对 csv 重新采样。

比方说,我有一个这样的 csv 文件:

4  5
9  2
3  7
1  5
2  4
9  10

我希望我的 dataframe 是:

4  5
1  5

如果我读取 csv 然后每 3 行删除 1 行,它是无用的,因为它花费了太多时间。 有人有想法吗? :)(顺便说一下,我正在使用 Python)

干杯

如果我理解正确的话,您想将阅读时间减少到(最多)总时间的 1/3。 Pandas 有许多 function 来自定义您的 csv 读取,但没有一个会避免读取(尽管随后丢弃)您的整个文件,因为它存储在磁盘上的连续块上。

我的想法是,如果您的约束是时间(而不是内存),那么在任何情况下,无论您的文件大小如何,减少 1/3 的时间都是不够的。 你可以做的是:

  • 阅读全文 csv
  • 过滤它,每 3 只保留 1 行
  • 将结果存储在另一个文件中
  • 在接下来的运行中,读取过滤后的 csv

您需要先创建一个 csv 读取器 object,然后创建一个生成器,它将只从迭代器中读取第 n 个项目,然后将其用作 dataframe 源。 通过这样做,您将避免过度使用 memory。

import csv
import pandas as pd

with open('file.csv', newline='') as f:
    reader = csv.reader(f)
    data = (x for i, x in enumerate(reader) if i % 3 == 0)
df = pd.Dataframe(data)

看起来还有一种更简单的方法:将 lambda 传递给 read_csv 的 skiprows 参数

import pandas as pd

fn = lambda x: x % 3 != 0
df = pd.read_csv('file.csv', skiprows=fn)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM