python pandas去重复值数据dataframe操作,常用方法详解
删除重复数据是数据分析中经常会遇到的一个问题。通过数据去重,不仅可以节省内存空间,提高写入性能,还可以提升数据集的精确度,使得数据集不受重复数据的影响。
在 Pandas 中,可以使用 drop_duplicates() 方法来删除 DataFrame 中的重复行。该方法默认删除所有列值都相同的行,也可以指定列进行去重。
下面是一些常用的去重方法:
- drop_duplicates():删除 DataFrame 中的重复行。
- duplicated():返回一个布尔型 Series,指示每行是否为重复行。
- 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