从大型csv文件中删除重复项

时间:2019-05-03 21:10:43

标签: python python-3.x pandas csv

我有一个大约2400万行的大型csv,我想缩小尺寸。

以下是csv的预览:

enter image description here

我想删除具有相同CIK和IP的行,因为我有一堆这些文件,它们占用了大量空间,所以我想提供一种有效的方法来删除重复项。

我已经测试过有多少CIK重复项,对于有些重复则有100k以上,这就是为什么我想将这些重复项切掉的原因。

我已经尝试了一些方法,但是由于csv的大小,大多数情况下都失败了。

3 个答案:

答案 0 :(得分:1)

以下是使用pandasreduce的示例:

from functools import reduce

import pandas as pd

df = reduce(
    lambda df_i, df_j: pd.concat([df_i, df_j])
                         .drop_duplicates(subset=["cik", "ip"]),
    pd.read_csv("path/to/csv", chunksize=100000)
)
df.to_csv("path/to/deduplicated/csv")

这避免了一次打开整个文件(而是以100000行块打开),并避免了重复操作。

答案 1 :(得分:1)

另一种快速的方法是使用awk并从命令行运行:

awk -F, '!x[$1,$5]++' file.csv > file_uniq.csv

其中file.csv是文件名,而file_uniq.csv是要删除重复数据记录的位置($ 1和$ 5是列号,ip是1,{{ {1}})

P.S。如果您使用的是Linux / Mac,则应该安装cik,但可能需要在Windows上单独下载

答案 2 :(得分:0)

您可以执行以下操作:

import pandas as pd

df = pd.read_csv('filepath/filename.csv', sep='your separator', header = True, index=False)
df.drop_duplicates(subset=['cik','ip'], keep=False, inplace=True)
df.to_csv('filepath/new_filename.csv', sep= 'your separator', header=True, index=False)

并享受没有重复的csv。