[英]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 讀取器 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.