对数据进行统计分析之前,如果发现出现重复数据,而且这些重复数据是不应该出现的,应该首先进行处理。一般的处理方法是直接删除。判断行数据是否重复,有两种情况。第一种是整行数据全部与另一行的重复才认为行数据重复,第二种是该行中指定列的数据与其他行的重复则认为该行数据重复。[大谦Excel,dqexcel点com]
整行数据重复的情况
【问题描述】
DataFrame中整行数据与前面某行的重复,则认为该行是重复行,并删除该行。
【示例9-1】
本例使用的Excel文件的完整路径为“D:/Samples/ch09/01 数据去重/身份证号-去重.xlsx”。该文件打开后如图9-1所示,是不同部门工作人员的资料。请删除数据中的重复行。注意,必须整行数据与前面某行的重复才认为是重复行。
图9-1 不同部门人员信息
- ChatGPT提示词模板
新建ChatGPT会话,在提问文本框中输入下面的提示词:
你是pandas专家,文件路径为:D:/Samples/ch09/01 数据去重/身份证号-去重.xlsx。该Excel文件的第一个工作表中A-E列为给定数据。用pandas导入Excel文件的数据,导入前12行,引擎为"openpyxl"。在导入的数据中删除重复行。输出修改后的表数据。添加代码注释。
2. 代码
- 根据提示词得到类似下面的代码:
import pandas as pd
# 指定文件路径和工作表名称,并使用pandas库读取前12行数据
excel_file = 'D:/Samples/ch09/01 数据去重/身份证号-去重.xlsx'
sheet_name = 0 # 第一个工作表
data = pd.read_excel(excel_file, sheet_name=sheet_name, engine='openpyxl', nrows=12)
# 删除重复行
data = data.drop_duplicates()
# 输出修改后的表数据
print(data)
3. 使用代码
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出删除重复行后的数据。
>>> == RESTART: D:/Samples/1.py =
工号 部门 姓名 身份证号 性别
0 1001 财务部 陈东 5103211978100300** 男
1 1002 财务部 田菊 4128231980052512** 女
2 1008 财务部 夏东 1328011947050583** 男
3 1003 生产部 王伟 4302251980031135** 男
4 1004 生产部 韦龙 4302251985111635** 男
5 1005 销售部 刘洋 4302251980081235** 男
7 1006 生产部 吕川 3203251970010171** 男
8 1002 财务部 田菊 5128231982052512** 男
10 1009 销售部 吴晓 4302251980011535** 男
11 1004 生产部 韦应龙 4102251987111635** 男
注意,上面数据中,行标签为1和8的行数据虽然工号都是1002,但是身份证号和性别不一样。行标签为4和11的行数据也是工号相同,但其他数据有不同。
【知识点扩展】
本例中使用DataFrame对象的drop_duplicates方法删除重复行。该方法不指定参数时,要求整行数据重复才认为是重复行。
指定数据重复的情况
【问题描述】
DataFrame某行数据中,如果指定列的数据与前面某行的重复,则认为该行是重复行,并删除该行。
【示例9-2】
本例使用示例9-1的数据。在导入的数据中根据工号删除重复行。
- ChatGPT提示词模板
新建ChatGPT会话,在提问文本框中输入下面的提示词:
你是pandas专家,文件路径为:D:/Samples/ch09/01 数据去重/身份证号-去重.xlsx。该Excel文件的第一个工作表中A-E列为给定数据。用pandas导入Excel文件的数据,导入前12行,引擎为"openpyxl"。在导入的数据中根据工号删除重复行。输出修改后的表数据。添加代码注释。
2. ChatGPT提示词模板说明
指明根据“工号“列的数据查找重复行,只要某行的工号数据与前面某行的重复,则该行被判定为重复行,删除。
3. 代码
- 根据提示词得到类似下面的代码:
import pandas as pd
# 读入Excel文件,只读取第一个工作表的前12行数据
df = pd.read_excel('D:/Samples/ch09/01 数据去重/身份证号-去重.xlsx', sheet_name=0, nrows=12, engine='openpyxl')
# 根据工号字段(列)删除重复行
df.drop_duplicates(subset=['工号'], keep='first', inplace=True)
# 输出修改后的表数据
print(df)
4. 使用代码
打开Python IDLE,新建一个脚本文件,将上面生成的代码复制进去,保存到D:/Samples/1.py。运行脚本,在IDLE Shell窗口输出删除重复行后的数据。
>>> == RESTART: D:/Samples/1.py =
工号 部门 姓名 身份证号 性别
0 1001 财务部 陈东 5103211978100300** 男
1 1002 财务部 田菊 4128231980052512** 女
2 1008 财务部 夏东 1328011947050583** 男
3 1003 生产部 王伟 4302251980031135** 男
4 1004 生产部 韦龙 4302251985111635** 男
5 1005 销售部 刘洋 4302251980081235** 男
7 1006 生产部 吕川 3203251970010171** 男
10 1009 销售部 吴晓 4302251980011535** 男
可见,本例中工号重复的行都被删除了。
【知识点扩展】
本例中使用DataFrame对象的drop_duplicates方法删除重复行。用subset参数指定根据哪个或哪些列判定重复行。用keep参数指定保留重复行中的哪个行,比如参数值为”first”时保留第1次出现的行,后面的重复行删除。