首页 > 编程语言 >几行Python代码,轻松搞定Excel表格数据去重

几行Python代码,轻松搞定Excel表格数据去重

时间:2024-01-17 14:33:22浏览次数:24  
标签:xlsx 搞定 SRE Python data Excel pd 2023 数据

湖蓝几何球体LinkedIn Banner.png 转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。


众所周知,Python在处理Excel数据文档时非常强大。最近也尝试了一下使用Python处理Excel数据,几行代码就能实现一个非常有用的功能,非常棒!

这次实验的是,使用Python给Excel数据去重。

创建原始数据

以2023年的四川农产品土特产销售额数据为例,做成原数据文档《SRE成长记2023年四川特产销售额统计.xlsx》,数据如下: 在这里插入图片描述 备注: 表格中两行黄色底色数据,为重复数据。其中重复的蜂蜜Q1季度的销售额数据改为了8888,用途后边详解,即蓝色底色的两组数据。

数据处理实验

1. 以“特产”字段为参照,有重复的数据都删掉,并将处理后的数据存入新Excel文件。

代码:

import pandas as pd
data = pd.DataFrame(pd.read_excel("SRE成长记2023年四川特产销售额统计.xlsx","原始数据"))  #文件名要带上扩展名.xlsx
# print(data.columns)  #查看index,为data.drop_duplicates参数subset的value值提供依据

data.drop_duplicates(subset=['             季度\n特产'],keep='first',inplace=True)
data.to_excel("SRE成长记2023年四川特产销售额统计-副本1.xlsx")

drop_duplicates参数解释:

subset:以该列为标准,只要在这一列中出现了重复的数据,都会被处理; keep:出现重复的数据中,保存第几个数据行;first表示保留第一个;last表示保留最后一个;False表示所有重复的行都删除,设置为False时不加引号。 inplace:表示是否在原数据上修改,True表示修改。

执行代码后,在当前目录生成了一个新文件《SRE成长记2023年四川特产销售额统计-副本1.xlsx》,文件中数据为删除了重复数据的新数据: 在这里插入图片描述 有个问题,即蜂蜜数据。

两行重复的蜂蜜数据,在Q1的销售额是不同的(好比一个班有两个同名同姓的学生,他们语文成绩一样,但其它科目的成绩不相同一样),但因为使用的特产名称来判断数据重复,所以第二条蜂蜜数据就被删除了。

如果用特产名称(或学生姓名)来作为去重标准,就会有类似这种数据被删除的风险。

避免这个风险,可以在去重时,去掉subset参数,默认所有列作为数据重复的对比项。即需要所有列的数据都一模一样,才会被判断为重复数据,被删除,即下一种方法。

2. 对比所有列数据,删除重复数据

代码:

import pandas as pd
data = pd.DataFrame(pd.read_excel("SRE成长记2023年四川特产销售额统计.xlsx","原始数据"))

data.drop_duplicates(keep='first',inplace=True)
data.to_excel("SRE成长记2023年四川特产销售额统计-副本2.xlsx")

执行代码后,在当前目录生成了新文件《SRE成长记2023年四川特产销售额统计-副本2.xlsx》,文件中数据为处理之后的新数据。

可以看到,因为对比了全局列,所有Q1季度销售额不一样的两条蜂蜜数据都被保留了下来:

图片

3. 将去重后的数据原地保存

将去重后的数据在当前Excel文档相同sheet保存,重新打开文件,就是处理之后的数据了,新数据会覆盖原来的原始数据。

代码:

import pandas as pd
data = pd.DataFrame(pd.read_excel("SRE成长记2023年四川特产销售额统计.xlsx","原始数据"))
data.drop_duplicates(keep='first',inplace=True)

with pd.ExcelWriter("SRE成长记2023年四川特产销售额统计.xlsx") as writer:
    data.to_excel(writer) 

运行代码后,发现原始数据文档《SRE成长记2023年四川特产销售额统计.xlsx》的修改日期变成了最新。

打开文档,文档中数据为处理后的数据,连sheet名称也由原来的“原始数据”变成了“sheet1”: 在这里插入图片描述 可以修改上面最后一行代码data.to_excel(writer) 为data.to_excel(writer,sheet_name='处理数据') 给新的sheet重命名: 在这里插入图片描述

4. 将去重后的数据在原Excel,新建sheet保存

将修改后的数据原地保存,是比较危险的,覆盖了原始数据。如果不想新建文件,可以在当前Excel文件新建sheet保存修改后的数据。

代码:

import pandas as pd
data = pd.DataFrame(pd.read_excel("SRE成长记2023年四川特产销售额统计.xlsx","原始数据"))
data.drop_duplicates(keep='first',inplace=True)

with pd.ExcelWriter("SRE成长记2023年四川特产销售额统计.xlsx",mode='a') as writer:
    data.to_excel(writer,sheet_name="处理数据")

执行代码后,原始数据文档《SRE成长记2023年四川特产销售额统计.xlsx》修改时间变成了最新。打开文档,发现已经新建了“处理数据”sheet,原sheet数据未被覆盖: 在这里插入图片描述 “处理数据”sheet为修改后的数据: 在这里插入图片描述

去重处理Excel实验,到此为止,很有意思,你也试试吧。

标签:xlsx,搞定,SRE,Python,data,Excel,pd,2023,数据
From: https://blog.51cto.com/u_10950710/9292707

相关文章

  • Python实现AI换脸功能
    运行时如果提示模块requests和simplejson不存在使用命令pipinstallrequestspipinstallsimplejsonimportrequestsimportjsonimportsimplejsonimportbase64#第一步:获取人脸关键点deffind_face(imgpath):""":paramimgpath:图片的地址:return:......
  • python3之多进程线程
    本文内容参考https://www.liaoxuefeng.com/wiki/1016959663602400/1017628290184064 多进程os模块的fork()多进程(multiprocessing):Unix/Linux操作系统提供了一个fork()函数,fork()函数调用时,操作系统自动把当前进程(父进程)复制了一份(子进程),然后分别在父进程和子进程内返回。......
  • Python字符串删除第一个字符常用的方法!
    字符串是常用的数据类型之一,在Python中,用引号表示字符串,双引号或单引号都可以,保持统一即可。那么Python字符串如何删除第一个字符?想要删除字符串第一个字符,有多种办法可以实现,具体请看下文。1、使用切片切片是Python中一个非常强大的功能,可以用于获取列表、字符串和元......
  • Python 面向对象的私有属性获取
    前言全局说明一、安装flask模块二、引用模块三、启动服务模块安装、引用模块、启动Web服务方法,参考下面链接文章:https://www.cnblogs.com/wutou/p/17963563四、面向对象的私有属性获取4.1.2classFoo:def__init__(self):self.name='wangwu'......
  • python-pyspark数据输入
    数据容器转rdd对象通过SparkContext对象的parallelize成员方法,将python数据容器转为rdd对象frompysparkimportSparkConf,SparkContextconf=SparkConf().setMaster("local[*]").setAppName("test_spark_app")sc=SparkContext(conf=conf)data1=[1,2,3,4,5]data2=(1......
  • (Python)每日代码||2024.1.17||函数中给列表形参默认值时,该默认列表在函数中的改变会
    deff(x,li=[1]):print(id(li))li.append(x)print(li)f('a')#第一次调用函数print()f('b')#第二次调用函数print()f('a',[])#第三次调用函数print()f('b',[2,2])#第四次调用函数print()f('a')#第五次调用函数'''输出14......
  • python 连接mysql 报错 打包 报错
    mysql.connector.connect(auth_plugin='mysql_native_password',host=lis[0],database=lis[1],user=lis[2],password=lis[3])auth_plugin='mysql_native_password'Python连接MySQL报错:mysql.connector.errors.NotSupportedError:Authenticationplugin......
  • python循环语句
    while循环与其他语言不同的是python中的while循环没有dowhile语句,要么直接使用while循环,或者使用whileelse语句,其基本格式如下:while<expr>:<statement(s)>else:<additional_statement(s)>for循环遍历循环格式如下(将序列中的元素依次赋值给变量,再通过循环体处......
  • python 在排序数组中查找元素的第一个和最后一个位置 多种解法
    二分查找:基于二分查找的算法可以在O(logn)的时间复杂度内解决该问题。具体实现方式是,先使用二分查找找到该元素的位置,然后向左和向右扩展,直到找到第一个和最后一个位置。代码如下:defsearchRange(nums,target):defbinarySearch(nums,target,lower):left,righ......
  • python实现抓取表情网站图片
    1:效果图2:代码importosimportrequestsfrombs4importBeautifulSoupifnotos.path.exists('./images/'):os.mkdir('./images/')headers={'User-Agent':'Mozilla/5.0(WindowsNT10.0;WOW64)AppleWebKit/537.36(K......