处理重复数据

对数据进行统计分析之前,如果发现出现重复数据,而且这些重复数据是不应该出现的,应该首先进行处理。一般的处理方法是直接删除。判断行数据是否重复,有两种情况。第一种是整行数据全部与另一行的重复才认为行数据重复,第二种是该行中指定列的数据与其他行的重复则认为该行数据重复。[大谦Excel,dqexcel点com]

整行数据重复的情况

【问题描述】

DataFrame中整行数据与前面某行的重复,则认为该行是重复行,并删除该行。

【示例9-1】

本例使用的Excel文件的完整路径为“D:/Samples/ch09/01 数据去重/身份证号-去重.xlsx”。该文件打开后如图9-1所示,是不同部门工作人员的资料。请删除数据中的重复行。注意,必须整行数据与前面某行的重复才认为是重复行。

Document Image

图9-1 不同部门人员信息

  • ChatGPT提示词模板

新建ChatGPT会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch09/01 数据去重/身份证号-去重.xlsx。该Excel文件的第一个工作表中A-E列为给定数据。用pandas导入Excel文件的数据,导入前12行,引擎为"openpyxl"。在导入的数据中删除重复行。输出修改后的表数据。添加代码注释。

2. 代码

  • 根据提示词得到类似下面的代码:
code.python
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窗口输出删除重复行后的数据。

code.python
>>> == 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会话,在提问文本框中输入下面的提示词:

prompt
你是pandas专家,文件路径为:D:/Samples/ch09/01 数据去重/身份证号-去重.xlsx。该Excel文件的第一个工作表中A-E列为给定数据。用pandas导入Excel文件的数据,导入前12行,引擎为"openpyxl"。在导入的数据中根据工号删除重复行。输出修改后的表数据。添加代码注释。

2. ChatGPT提示词模板说明

指明根据“工号“列的数据查找重复行,只要某行的工号数据与前面某行的重复,则该行被判定为重复行,删除。

3. 代码

  • 根据提示词得到类似下面的代码:
code.python
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窗口输出删除重复行后的数据。

code.python
>>> == 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次出现的行,后面的重复行删除。