Python 3.x 高效算法,用于清理大型csv文件

Python 3.x 高效算法,用于清理大型csv文件,python-3.x,csv,Python 3.x,Csv,所以我有一个大型数据库,包含在csv文件中,大约有1000多个,每个csv大约有2400万行。我想把它清理干净 这是csv中的数据示例: 正如你所看到的,有一些行具有相同的“cik”,所以我想清理所有行,这样我们就得到了唯一的“cik”,并且没有任何重复项 我曾尝试用python来实现这一点,但没有成功 任何建议都会有帮助。来自的工具可以执行这种类型的重复删除免责声明:我是作者。tsv uniq类似于Unix uniq程序,有两个优点:数据不需要排序,单个字段可以用作键。以下命令将用于删除cik

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

这是csv中的数据示例:

正如你所看到的,有一些行具有相同的“cik”,所以我想清理所有行,这样我们就得到了唯一的“cik”,并且没有任何重复项

我曾尝试用python来实现这一点,但没有成功

任何建议都会有帮助。

来自的工具可以执行这种类型的重复删除免责声明:我是作者。tsv uniq类似于Unix uniq程序,有两个优点:数据不需要排序,单个字段可以用作键。以下命令将用于删除cik和cik plus ip字段上的重复项:

-H选项保留标题。上述表单使用TAB作为字段分隔符。要使用逗号或其他字符,请使用-d |-分隔符选项,如下所示:

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

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

这就是我用来过滤所有具有相同“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.`
所以我不确定我的代码是否有bug,或者它是否与来自csv的数据有关

我打开csv检查数据是否正常


我已经将行数从2400万减少到500万左右,这从一开始就是我的目标。但是这个错误困扰着我…

你是想重置cik字段使其唯一,还是想过滤掉cik字段的重复项,使每个cik值只有一个条目?@PaulProgrammer我想清除重复项,所以有许多行具有相同的ip和cik,所以我想打扫卫生them@PaulProgrammer在这里的图片中,你可以看到一些cik as 1136894重复,因此有两行具有该cik,它们都具有相同的cik,因此我需要删除这样的行。如何选择保留哪一行?一些行具有相同的IP和相同的cik,但值不同,例如大小、登录。过滤掉ip/cik DUP应该很简单,但您仍然必须选择要保留的其他值。这种方法将忽略在不同块中发生的重复。根据应用程序的不同,这可能并不重要,但这是以块的形式处理数据的一个特征。
sys:1: DtypeWarning: Columns (14) have mixed types. Specify dtype option on import or set low_memory=False.`