【发布时间】:2019-02-23 17:22:05
【问题描述】:
我正在处理一个 13.9 GB 的 csv 文件,其中包含大约 1600 万行和 85 列。我知道可能有几十万行是重复的。我运行了这段代码来删除它们
import pandas
concatDf=pandas.read_csv("C:\\OUT\\Concat EPC3.csv")
nodupl=concatDf.drop_duplicates()
nodupl.to_csv("C:\\OUT\\Concat EPC3- NoDupl.csv",index=0)
low_memory=False
但是,这让我陷入了 MemoryError。我的内存是 16GB,不能再高了。有没有一种更有效的方法来删除重复项,可能无需我将 csv 文件分解成更小的文件,就可以将其分块?
【问题讨论】:
-
dask 可能会给你带来一些运气
-
如果你有 Linux,这很好用:cat Concat\ EPC3.csv |排序 | uniq(如果有,请注意标题)
-
在这种情况下对 df 进行分块将是有效的,因为它会删除块中出现的重复项,但如果重复出现在多个块中,它们将不会被删除(只是块中的重复项将被删除) )。
-
我建议做的一件事是查看是否可以通过指定每列的 dtype 来减少 DF 的内存。例如,pandas 尝试预先猜测数据类型。有时您认为列可能是纯类型 Int 或 float,但 Pandas 可能会将其分配为对象,或者可能存在重复的列是可以分配类别的对象。 Obj 到 Float 或 int 的转换大大减少了内存,对象到类别也是如此。
标签: python duplicates large-data