如何有效去除Python中DataFrame或CSV文件中的所有重复项?

7 投票
1 回答
15573 浏览
提问于 2025-04-18 01:22

我有一个名为mytest.csv的表格,内容如下:

timestamp   val1    val2    user_id  val3  val4    val5    val6
01/01/2011  1   100 3    5     100     3       5
01/02/2013  20  8        6     12      15      3
01/07/2012      19  57   10    9       6       6        
01/11/2014  3100    49  6        12    15      3
21/12/2012          240  30    240     30       
01/12/2013          63                  
01/12/2013  3200    51  63       50

上面的数据是通过以下代码得到的,我试着去掉所有重复的记录,但不幸的是,还是有一些重复的(是根据'timestamp'和'user_id'来判断的):

import pandas as pd

newnames = ['timestamp', 'val1', 'val2','val3', 'val4','val5', 'val6','user_id']
df = pd.read_csv('mytest.csv', names = newnames, header = False, parse_dates=True, dayfirst=True)
df['timestamp'] = pd.to_datetime(df['timestamp'], dayfirst=True) 
df = df.loc[:,['timestamp', 'user_id', 'val1', 'val2','val3', 'val4','val5', 'val6']]
df_clean = df.drop_duplicates().fillna(0)

另外,我想知道如何高效地去掉数据中的所有重复项(预处理),以及我是否应该在将数据读入数据框之前就处理这些重复项。比如,最后两行被认为是重复的,只有最后一行(val1 = 3200,且val1不为空)应该保留在数据框中。

谢谢你的帮助!

1 个回答

9

如果你想根据特定的列来去掉重复的记录,可以在使用 drop_duplicates 的时候,使用 subset 这个参数(在旧版本的 pandas 中是 cols)。

df_clean = df.drop_duplicates(subset=['timestamp', 'user_id'])

撰写回答