[英]How to remove part of a panda dataframe without loading the full file?
我有一個非常大的 dataframe 有數百萬行,將整個文件加載到 memory 中通常是不可行的。 最近有一些不良數據進入,我需要將它們從數據庫中刪除。 到目前為止,我所做的是:
file = '/path to database'
rf = pd.read_csv(f'{file}.csv', chunksize = 3000000, index_col=False)
res = pd.concat([chunk[chunk['timestamp'] < 1.6636434764745E+018] for chunk in rf)]
res.to_csv(f'{file}.csv', index=False)
基本上它是打開數據庫並保存我想要的部分,覆蓋原始文件。
然而,數據變得如此之大,以至於無法適應 memory。 有沒有更好的方法基於簡單的查詢截斷 dataframe 的一部分?
與 rest 相比,截斷部分通常非常小,比如 100k 行並且總是在末尾。
在這種情況下,我會避免使用 pandas 並直接編輯 csv 文件本身。 例如:
import csv
with open("test_big.csv", "r") as f_in, open("test_out.csv", "w") as f_out:
reader = csv.reader(f_in)
writer = csv.writer(f_out)
for row in reader:
if int(row[-1]) > 9900: # your condition here
writer.writerow(row)
對於上下文, test_big.csv
看起來像這樣
1,2,3,4,5891
1,2,3,4,7286
1,2,3,4,7917
1,2,3,4,937
...
並且有 400,000 條記錄。 執行耗時 0.2 秒。
編輯:跑了 40,000,000 條記錄,耗時 15 秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.