我有一个大约2400万行的大型csv,我想缩小尺寸。
以下是csv的预览:
我想删除具有相同CIK和IP的行,因为我有一堆这些文件,它们占用了大量空间,所以我想提供一种有效的方法来删除重复项。
我已经测试过有多少CIK重复项,对于有些重复则有100k以上,这就是为什么我想将这些重复项切掉的原因。
我已经尝试了一些方法,但是由于csv的大小,大多数情况下都失败了。
答案 0 :(得分:1)
以下是使用pandas
和reduce
的示例:
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。