簡體   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