详解pandas最常用的3种去重方法

删除重复数据是数据分析中经常会遇到的一个问题。通过数据去重,不仅可以节省内存空间,提高写入性能,还可以提升数据集的精确度,使得数据集不受重复数据的影响。

Pandas 中,可以使用 drop_duplicates() 方法来删除 DataFrame 中的重复行。该方法默认删除所有列值都相同的行,也可以指定列进行去重。

下面是一些常用的去重方法:

  1. drop_duplicates():删除 DataFrame 中的重复行。
  2. duplicated():返回一个布尔型 Series,指示每行是否为重复行。
  3. dropna():删除缺失值。

下面是这些方法的详细说明和示例:

drop_duplicates()

drop_duplicates() 方法返回一个去重后的 DataFrame。

语法:

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

参数说明:

  • subset:可选,指定要考虑去重的列,默认为所有列。可以传递一个或多个列的名称或索引来进行去重。
  • keep:可选,指定删除哪些重复项。默认值为 "first",表示删除所有重复项,除了第一个。如果设置为 "last",则保留最后一个重复项,并删除其余重复项。如果设置为 False,则删除所有重复项。
  • inplace:可选,指示是否直接修改原始 DataFrame。如果设置为 True,则修改 DataFrame 并返回 None。
  • ignore_index:可选,指示是否重置索引。如果设置为 True,则重置索引。

举个例子:

import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 2, 3, 4],
    'B': ['a', 'b', 'b', 'c', 'd']
})

df.drop_duplicates()  # 默认去除所有列相同的行

# 指定列去重
df.drop_duplicates(subset='A')  # 去除 A 列相同的行

# 指定多列去重
df.drop_duplicates(subset=['A', 'B'])  # 去除 A、B 列相同的行

duplicated()

duplicated() 方法返回一个布尔型 Series,指示每行是否为重复行。如果行是重复的,则为 True,否则为 False。

语法:

DataFrame.duplicated(subset=None, keep='first')

参数说明:

  • subset:可选,指定要考虑去重的列,默认为所有列。可以传递一个或多个列的名称或索引来进行去重。
  • keep:可选,指定删除哪些重复项。默认值为 "first",表示删除所有重复项,除了第一个。如果设置为 "last",则保留最后一个重复项,并删除其余重复项。如果设置为 False,则删除所有重复项。

示例:


import pandas as pd

df = pd.DataFrame({
    'A': [1, 2, 2, 3, 4],
    'B': ['a', 'b', 'b', 'c', 'd']
})

df.duplicated()  # 返回一个布尔型 Series,指示每行是否为重复行

dropna()

dropna()是pandas中用于删除缺失值(NaN)的方法,可以对数据进行清洗。该方法默认删除所有包含缺失值的行或列,也可以根据指定条件进行删除。

语法为:

DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)

各参数含义如下:

  • axis:指定删除的行或列,0表示删除行,1表示删除列,默认为0。
  • how:指定删除方式,取值为‘any’和‘all’,‘any’表示只要有缺失值就删除该行或列,‘all’表示所有值都是缺失值才删除该行或列,默认为‘any’。
  • thresh:指定每行或每列中最少非空值的数量,如果不足该数量,则删除该行或列。默认为None,表示不使用该参数。
  • subset:指定删除时要考虑的列,仅在axis=0时有效。可以传递列标签或列标签的列表。默认为None,表示使用所有列。
  • inplace:指定是否在原数据上进行修改,默认为False,表示不修改原数据,返回一个新数据。

下面是一个示例,演示如何使用dropna()方法删除数据中的缺失值:

import pandas as pd
import numpy as np

# 构造包含缺失值的数据
df = pd.DataFrame({'A': [1, 2, np.nan, 4],
                   'B': [5, np.nan, 7, 8],
                   'C': [9, 10, 11, np.nan]})

# 删除所有包含缺失值的行
df1 = df.dropna()

# 删除所有包含缺失值的列
df2 = df.dropna(axis=1)

# 保留至少有两个非空值的行
df3 = df.dropna(thresh=2)

# 仅对‘A’列和‘B’列进行删除
df4 = df.dropna(subset=['A', 'B'])

print(df)
print(df1)
print(df2)
print(df3)
print(df4)

输出结果如下:

     A    B     C
0  1.0  5.0   9.0
1  2.0  NaN  10.0
2  NaN  7.0  11.0
3  4.0  8.0   NaN

     A    B    C
0  1.0  5.0  9.0

Empty DataFrame
Columns: []
Index: [0, 1, 2, 3]

     A    B     C
0  1.0  5.0   9.0
1  2.0  NaN  10.0
3  4.0  8.0   NaN

     A    B     C
0  1.0  5.0   9.0
3  4.0  8.0   NaN

本文链接:https://my.lmcjl.com/post/19980.html

展开阅读全文

4 评论

留下您的评论.