所以我有一个很大的数据库,包含在csv文件中,其中大约有1000多个,每个csv约有2400万行。我想清理它。
这是csv中数据的示例:
因此,您可以看到有些行具有相同的“ cik”,因此我想清除所有行,以便获得唯一的“ cik”,并且没有重复项。
我曾经尝试使用python来做,但是却无法做到。
任何建议都会有所帮助。
答案 0 :(得分:0)
tsv-uniq中的eBay's TSV Utilities工具可以进行这种重复删除(免责声明:我是作者)。 tsv-uniq
与Unix uniq
程序相似,具有两个优点:不需要对数据进行排序,并且可以将各个字段用作键。以下命令将用于删除cik
和cik
加上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万。但是这个错误困扰着我...