繁体   English   中英

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

[英]Removing duplicates from a large csv file

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

这是一个 csv 的小预览:

在此处输入图片说明

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

我已经测试了有多少 CIK 重复,对于一些超过 100k,这就是我想删除这些重复的原因。

我尝试了一些东西,但在大多数情况下它失败了,因为 csv 的大小。

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

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

其中file.csv是您的文件名,而file_uniq.csv是您想要删除重复记录的位置($1 和 $5 是列号,1 代表ip ,5 代表cik

PS 如果你使用的是 Linux/Mac,你应该有awk ,但可能需要在 Windows 上单独下载

这是一个使用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 行块中打开它),并在进行时删除重复项。

您可以执行以下操作:

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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM