欢迎访问宙启技术站
智能推送

详解pandas使用drop_duplicates去除DataFrame重复项参数

发布时间:2023-05-17 13:59:30

在数据处理中,数据重复往往会对统计结果产生影响,所以对重复数据进行处理是非常必要的。Pandas中提供了drop_duplicates方法用于去除DataFrame中的重复项。

drop_duplicates方法用法如下:

df.drop_duplicates(subset=None, keep='first', inplace=False)

其中,参数subset用于指定要判断重复的列,如果不指定,则判断整个行是否重复。参数keep用于指定删除哪些重复项,默认保留 个重复项,可以设置为last保留最后一个重复项或者False全部删除。参数inplace可以设置为True表示直接在原DataFrame上修改,否则返回一个新的DataFrame。

下面通过一个示例来详解drop_duplicates的使用。

示例数据:

import pandas as pd
 
data = {
    'name': ['张三', '李四', '王五', '张三', '赵六', '李四', '张三'],
    'age': [20, 21, 22, 20, 23, 21, 20],
    'gender': ['男', '女', '男', '男', '女', '女', '男'],
    'score': [90, 80, 70, 90, 60, 80, 90]
}
 
df = pd.DataFrame(data)

打印出来的DataFrame如下:

| | name | age | gender | score |

|---:|:------:|:-----:|:--------:|:-------:|

|0 |张三 |20 |男 |90 |

|1 |李四 |21 |女 |80 |

|2 |王五 |22 |男 |70 |

|3 |张三 |20 |男 |90 |

|4 |赵六 |23 |女 |60 |

|5 |李四 |21 |女 |80 |

|6 |张三 |20 |男 |90 |

从上面的DataFrame中可以看出,第0行和第3行、第1行和第5行、第6行和第0、3行都是重复的。

1. 删除整行重复项

如果我们要删除整行重复的数据,直接使用drop_duplicates方法即可,不需要指定subset参数。

df.drop_duplicates()

执行完上面的语句后,得到的DataFrame如下:

| | name | age | gender | score |

|---:|:------:|:-----:|:--------:|:-------:|

|0 |张三 |20 |男 |90 |

|1 |李四 |21 |女 |80 |

|2 |王五 |22 |男 |70 |

|4 |赵六 |23 |女 |60 |

可以看出,整行重复的数据已经被删除了,只保留了 个出现的数据。

2. 指定列判断重复项

有时候,我们只需要指定某几列判断是否重复,可以使用subset参数来指定要判断的列。

例如,我们只需要根据name和gender这两列判断是否重复,可以这样写:

df.drop_duplicates(subset=['name', 'gender'])

执行完上面的语句后,得到的DataFrame如下:

| | name | age | gender | score |

|---:|:------:|:-----:|:--------:|:-------:|

|0 |张三 |20 |男 |90 |

|1 |李四 |21 |女 |80 |

|2 |王五 |22 |男 |70 |

|4 |赵六 |23 |女 |60 |

可以看出,只保留了name和gender都不相同的行,第0和第3行是name和gender都相同的,所以只保留了 个出现的。

3. 保留最后一个重复项

默认情况下,drop_duplicates方法会保留 个出现的重复项,如果想要保留最后一个重复项,可以将keep参数设置为last。

例如,我们要根据name和gender这两列判断是否重复,保留最后一个重复项,可以这样写:

df.drop_duplicates(subset=['name', 'gender'], keep='last')

执行完上面的语句后,得到的DataFrame如下:

| | name | age | gender | score |

|---:|:------:|:-----:|:--------:|:-------:|

|2 |王五 |22 |男 |70 |

|4 |赵六 |23 |女 |60 |

|5 |李四 |21 |女 |80 |

|6 |张三 |20 |男 |90 |

可以看出,只保留了每一组name和gender都相同的数据中的最后一个。

4. 直接在原DataFrame上删除重复项

默认情况下,drop_duplicates方法不会修改原DataFrame,而是返回一个新的DataFrame。如果想要直接在原DataFrame上删除重复项,可以将inplace参数设置为True。

例如,我们要删除整行重复的数据,并直接在原DataFrame上修改,可以这样写:

df.drop_duplicates(inplace=True)

执行完上面的语句后,df的值如下:

| | name | age | gender | score |

|---:|:------:|:-----:|:--------:|:-------:|

|0 |张三 |20 |男 |90 |

|1 |李四 |21 |女 |80 |

|2 |王五 |22 |男 |70 |

|4 |赵六 |23 |女 |60 |

可以看出,df的值已经被修改了。