本文所用到的Excel表格内容如下:
1字段选择
1.1 针对整行所有字段进行重复值处理
import pandas as pd
df = pd.read_excel(r'C:\Users\admin\Desktop\数据分析测试表.xlsx')
print(df.drop_duplicates())
result:
分类 书名 作者
0 历史 史记 司马迁
1 小说 红楼梦 曹雪芹
2 散文 文化苦旅 余秋雨
3 历史 明朝那些事儿 当年明月
4 漫画 半小时漫画 混子曰
5 随笔 培根随笔 培根
9 历史 资治通鉴 司马光
10 散文 行者无疆 余秋雨
11 漫画 半小时唐诗 混子曰
drop_duplicates()方法默认对所有值进行重复值判断,且默认保留首次出现的那一行的值
1.2只针对某一列进行重复值的处理
对某一列进行重复值删除时,只需使用subset参数知名要判断的列名即可
df = pd.read_excel(r'C:\Users\admin\Desktop\数据分析测试表.xlsx')
print(df.drop_duplicates(subset="分类"))
result:
分类 书名 作者
0 历史 史记 司马迁
1 小说 红楼梦 曹雪芹
2 散文 文化苦旅 余秋雨
4 漫画 半小时漫画 混子曰
5 随笔 培根随笔 培根
此时只考虑指定的列,有重复即刻删除,之余其他列是否是重复的不在考虑范围内,所以相比初始表格数据来看,第2、5、10、11行,虽然书名和作者不一样,但由于分类都是历史类。所以只保留第2行的内容。,其他重复行行的内容则被删除
1.3 针对多列进行重复值的处理
df = pd.read_excel(r'C:\Users\admin\Desktop\数据分析测试表.xlsx')
print(df.drop_duplicates(subset=["分类", "作者"]))
result:
分类 书名 作者
0 历史 史记 司马迁
1 小说 红楼梦 曹雪芹
2 散文 文化苦旅 余秋雨
3 历史 明朝那些事儿 当年明月
4 漫画 半小时漫画 混子曰
5 随笔 培根随笔 培根
9 历史 资治通鉴 司马光
此时相比初始表格数据来看,由于指定了多列,数据是否重复是要有所指定的多列的内容共同决定,而不只是单单看某一列。所以即使第2、5、10行,,虽然分类都属于历史类,但是由于书名和作者不一样,故不认为是重复记录,因此予以保留。而第4行和第9行都是余秋雨写的散文类,所以只保留了第3行的内容,第10行的内容则被删掉。
2.保留项的问题
利用Keep参数可以自定义重复值处理时的行为动作
2.1 默认情形
df = pd.read_excel(r'C:\Users\admin\Desktop\数据分析测试表.xlsx')
print(df.drop_duplicates())
result:
分类 书名 作者
0 历史 史记 司马迁
1 小说 红楼梦 曹雪芹
2 散文 文化苦旅 余秋雨
3 历史 明朝那些事儿 当年明月
4 漫画 半小时漫画 混子曰
5 随笔 培根随笔 培根
9 历史 资治通鉴 司马光
10 散文 行者无疆 余秋雨
11 漫画 半小时唐诗 混子曰
从结果可以看出, 默认情形时保留首次记录。所以相比于初始表格数据来看,第4行和第9行重复,保留第4行记录,删除第9行记录
2.2 Keep参数值为first的情形
df = pd.read_excel(r'C:\Users\admin\Desktop\数据分析测试表.xlsx')
print(df.drop_duplicates(keep='first'))
result:
分类 书名 作者
0 历史 史记 司马迁
1 小说 红楼梦 曹雪芹
2 散文 文化苦旅 余秋雨
3 历史 明朝那些事儿 当年明月
4 漫画 半小时漫画 混子曰
5 随笔 培根随笔 培根
9 历史 资治通鉴 司马光
10 散文 行者无疆 余秋雨
11 漫画 半小时唐诗 混子曰
从结果可以看出, Keep参数值为first时保留首次记录。所以相比于初始表格数据来看,第4行和第9行重复,保留第4行记录,删除第9行记录
2.3 Keep参数值为last的情形
df = pd.read_excel(r'C:\Users\admin\Desktop\数据分析测试表.xlsx')
print(df.drop_duplicates(keep='last'))
result:
分类 书名 作者
0 历史 史记 司马迁
4 漫画 半小时漫画 混子曰
5 随笔 培根随笔 培根
6 小说 红楼梦 曹雪芹
7 散文 文化苦旅 余秋雨
8 历史 明朝那些事儿 当年明月
9 历史 资治通鉴 司马光
10 散文 行者无疆 余秋雨
11 漫画 半小时唐诗 混子曰
从结果可以看出,Keep参数值为last时会保留最后一次出现的记录。所以相比于初始表格数据来看,第4行和第9行重复,保留第9行记录,删除第4行记录
2.4 Keep参数值为False的情形
df = pd.read_excel(r'C:\Users\admin\Desktop\数据分析测试表.xlsx')
print(df.drop_duplicates(keep=False))
result:
分类 书名 作者
0 历史 史记 司马迁
4 漫画 半小时漫画 混子曰
5 随笔 培根随笔 培根
9 历史 资治通鉴 司马光
10 散文 行者无疆 余秋雨
11 漫画 半小时唐诗 混子曰
从结果可以看出,Keep参数值为last时会把所有重复值删除。所以相比于初始表格数据来看,第4行和第9行重复,那么就将这2行都删除
注:Keep参数取值只有first,last和False。没有True,不要想当然的认为有False就有True