pandas删除数据&重复值处理

1,116 阅读3分钟

「这是我参与2022首次更文挑战的第12天,活动详情查看:2022首次更文挑战」。

删除数据

根据列名删除列

使用 drop 来删除某列,指定要删除的轴,与对应 列/行名称/索引

df.drop('name', axis = 1)  # 删除单列
df.drop(['name', 'age'], axis = 1)  # 删除多列

根据索引删除行

与上面删除列的方式相似,不过这里指定的是索引。

df.drop(0, axis=0)  # 删除单行
df.drop([0, 1], axis=0)  # 删除多行

使用 loc 定位数据并删除

先使用 loc 定位某条件的数据,再获取索引 index ,然后使用 drop 删除。

df.drop(df.loc[df['name'] == '娜美'].index, axis=0)  # 删除定位到的行

使用 del 删除列

del在原数据上进行修改,使用是要注意。

del df['age']

同时删除行、列

drop 也可以同时指定行列进行删除,这里删除第一、二行并删除 age 列。

df.drop(columns=['age'], index=[0, 1])

删除重复值

  • 指定 subset ,则根据指定的列作为参考进行去重,即如果某两行 a 值相同,则会删除第二次的出现的那一行,只保留第一次
  • 不指定 subset ,则根据所有列作为参考进行去重,只有两行数据 完全相同 才会进行去重。
df.drop_duplicates(subset=['a'], keep='first')
df.drop_duplicates(keep='first')



筛查重复值

示例数据

df = pd.DataFrame({'name':['Python',
                        'Python',
                        'Java',
                        'Java',
                        'C'],
                   'count': [2, 2, 6, 8, 10]})

在这里插入图片描述

判断某列是否有重复值

使用 values_counts() 对列中各值出现次数进行统计。结果默认按照降序进行排列,只需要判断第一行值的出现次数是否为1即可判断是否存在重复值。

df['a'].value_counts()

在这里插入图片描述

使用 drop_duplicates() 对重复值进行删除,只保留第一次出现的值,判断处理后的值是否与原 df 相等,如果 False 就表示有重复值。

df.equals(df.drop_duplicates(subset=['a'], keep='first'))

False

判断 DataFrame 是否有重复行

同样是使用 drop_duplicates() 对重复值进行删除,只保留第一次出现的值,此时不使用 subset 参数设置列,默认为全部列,判断处理后的值是否与原 df 相等,如果 False 就表示有重复值。

df.equals(df.drop_duplicates(keep='first'))

False

统计重复行的数量

注意这里的统计是参照所有列来的,只有两行完全相同才会判断为重复行,所以统计的结果是 1 。

len(df) - len(df.drop_duplicates(keep="first"))

1

显示重复的数据行

先删除重复的行,只保留第一次出现的,得到一个 行唯一 的数据集,再使用 drop_duplicates() 删除掉 df 中存在重复的所有数据,这次不保留第一次出现的重复值,将上述两个结果集进行合并,使用 drop_duplicates() 对新生成的数据集进行去重,即可得到重复行的数据。

df.drop_duplicates(keep="first")\
  .append(df.drop_duplicates(keep=False))\
  .drop_duplicates(keep=False)

在这里插入图片描述


对于刚入门 Python 或是想要入门 Python 的小伙伴,可以通过关注公众号“Python新视野”,一起交流学习,都是从新手走过来的,有时候一个简单的问题卡很久,但可能别人的一点拨就会恍然大悟,由衷的希望大家能够共同进步。另有整理的近千套简历模板,几百册电子书等你来领取哦!