高效的算法,用于清理大型csv文件

时间:2019-05-02 19:40:18

标签: python-3.x csv

所以我有一个很大的数据库,包含在csv文件中,其中大约有1000多个,每个csv约有2400万行。我想清理它。

这是csv中数据的示例:

因此,您可以看到有些行具有相同的“ cik”,因此我想清除所有行,以便获得唯一的“ cik”,并且没有重复项。

我曾经尝试使用python来做,但是却无法做到。

任何建议都会有所帮助。

2 个答案:

答案 0 :(得分:0)

tsv-uniq中的eBay's TSV Utilities工具可以进行这种重复删除(免责声明:我是作者)。 tsv-uniq与Unix uniq程序相似,具有两个优点:不需要对数据进行排序,并且可以将各个字段用作键。以下命令将用于删除cikcik加上ip字段上的重复项:

$ # Dedup on cik field (field 5)
$ tsv-uniq -H -f 5 file.tsv > newfile.tsv

$ # Dedup on both cik and ip fields (fields 1 and 5)
$ tsv-uniq -H -f 1,5 file.tsv > newfile.tsv

-H选项保留标题。以上形式使用TAB作为字段定界符。要使用逗号或其他字符,请使用-d|--delimiter选项,如下所示:

$ tsv-uniq -H -d , -f 5 file.csv > newfile.csv

tsv-uniq不支持CSV转义语法,但看起来数据集不需要转义。如果您的数据集确实使用了转义符,则可以使用同一包中的csv2tsv工具将其转换为TSV格式(无转义符)。该工具可在Unix和MacOS上运行,Releases页上有预构建的二进制文件。

答案 1 :(得分:0)

这就是我用来过滤所有具有相同“ cik”和“ ip”的重复项的方法

import pandas as pd

chunksize = 10 ** 5
for chunk in pd.read_csv('log20170628.csv', chunksize=chunksize):
    df = pd.DataFrame(chunk)
    df = df.drop_duplicates(subset=["cik", "ip"])
    df[['ip','date','cik']].to_csv('cleanedlog20170628.csv', mode='a')

但是在运行程序时,我得到了以下警告:

sys:1: DtypeWarning: Columns (14) have mixed types. Specify dtype option on import or set low_memory=False.`

所以我不确定我的代码是否有错误,或者与csv中的数据有关。

我打开了csv,以检查数据是否正常。

我从一开始就将行数从2400万减少到了500万。但是这个错误困扰着我...