csv怎么去重_csv如何去重

嘿,我们来谈谈 CSV 重复数据删除,好吗?如果你问我如何做到这一点,我不得不说有很多方法。
例如,我们首先需要看看数据有多大,它的结构是什么。

好吧,我们先来说说Python中的pandas库。
这个东西去重真是太方便了。
您导入 pandas,读取 CSV 文件,然后执行 df.drop_duplicates(inplace=True),一步完成。
如果要根据特定列(例如 id)删除重复项,则应该编写 df.drop_duplicates(subset=['id'], inplace=True)。
完成后,保存文件就可以了。

但是,如果你正在处理大文件,那么内存就会不够用,所以你必须想办法。
例如,分块读取,逐块删除重复项,最后将它们连接在一起。
或者使用csv库逐行读取并使用set存储已经读取的行,从而避免重复。

数据库也是一个不错的选择。
您将 CSV 数据导入数据库,然后使用 DISTINCT 或 GROUP BY 删除重复项,然后将其导出。
这个方法不错,特别适合数据量大、结构复杂的情况。

Dask 库也是个好东西。
它是 pandas 的并行扩展,特别适合超大规模数据处理。

要处理这样复杂的 CSV 文件,您需要先解析嵌套的 JSON,然后再进行繁重的工作。

我们来谈谈Linux命令行。
这种去除重复的方法简单快捷,但功能有限。
使用sort加uniq先排序,然后删除相邻的重复行。
或者使用 awk 删除重复项。
这个东西用一个数组来记录看过的行,只存储第一个显示的。

综上所述,常见场景下,pandas 是首选。
大文件需要使用分块、csv 库、数据库或 Dask 进行内存优化。
在进行繁重的工作之前,必须先处理复杂的数据。
命令行,适合简单文件,但功能有限。
就是这样。

oracle数据库中怎样删除一个表的重复数据。

说实话,这种SQL的写法让我头晕,但是确实可以解决问题。
您的两个语句,一种用于检查重复项,一种用于删除重复项,在逻辑上都是正确的。
但有一小部分需要注意,并不是所有数据库都支持 ROW_NUMBER() 等窗口函数。
例如,旧版本的Oracle没有此功能,因此必须使用ROWID或ROWNUM。

我在使用Oracle 1 1 g的时候,删除重复的时候很头疼。
Buddy立即写了hack:首先使用with子句标记所有重复的rns,然后删除它们。
像这样:
sql 删除表A 它在哪里( 从 ( ID选择 NUMBER () BY ( 分区 id , 名称 ) cnt 从表A ) 其中 cnt> 1 ); 这种方法比直接使用ROW_NUMBER()兼容性更好,但是写起来比较麻烦。
使用ROW_NUMBER()的前提是它支持MySQL 8 .0+、PostgreSQL、SQL Server 2 01 2 +等数据库。
没有任何后果。

有一个有趣的隐藏漏洞,其中包含重复删除的记录。
想一想,如果第一个键在自动增长表中,最好添加 WHERE rn <= (SELECT COUNT() FROM TABLE GROUP BY id, name);删除时避免删除错误。
上次我陷入这个陷阱,删除了八百条数据,我急得满头大汗。
最后我发现这句话没有加。

这条SQL在数据量较小时运行速度最快,但如果表有千万级,则使用ROW_NUMBER()。
我有一个项目,使用 Redis 临时缓冲区来处理大型数据集的重复。
首先我会扫描整个表并将其保存回来并批量删除。
比直接删除数据库要快得多。

我不知道此时运行的是哪个版本的 PostgreSQL,但是 MYSQL 5 .7 EXPLANATION 显示 ROW_NUMBER() 会扫描整个表,索引通常是无用的。
因此,如果表很大,建议使用EXPLANATION检查计划的执行情况,然后进行调制。

我记得信息大概有1 0条左右,不过建议你核实一下。
上次我们修改这个SQL时,我们发现执行时间从0.5 秒跳到了5 分钟,因为我们没有意识到表中有8 000万个硬币。

如何删除数据库中特定字段相同但特定列值为空的行?

删除具有空 pid 的行并复制其他字段组合并将它们与子查询匹配。

MySQL是直接使用IN编写的。
平方米 从数据中删除 PID 为 NULL 的地方 AND(信用、公司、姓名、电话、ID、rootid)IN( 选择信用、公司、姓名、电话、ID、rootid 来自数据 其中 pid 不为空 );
子查询查找非空pid的键组合。
主查询消除空的 pid 并合并相应的行。

Oracle 使用 EXISTS 代替。
平方米 从数据 d1 中删除 PID 为 NULL 的地方 它存在( 选择1 来自数据 d2 其中 d2 .pid 不为空 AND d1 .credit = d2 .credit AND d1 .公司 = d2 .公司 AND d1 .名称 = d2 .名称 AND d1 .电话 = d2 .电话 并且 d1 .id = d2 .id AND d1 .rootid = d2 .rootid );
PostgreSQL 支持多列 IN,SQL Server 使用 EXISTS。

创建信用、公司、姓名、电话、id、rootid 索引以提高性能。
平方米 CREATE INDEX idx_key ON data (credit,company,name,phone,id,rootid);
备份表,然后删除。
平方米 CREATE TABLE datas_backup AS SELECT FROM datas;
自己决定。