difflib 比较文本相似度,找出错误值

        在日常的数据分析过程中,我们可能会遇到这样的问题。在处理数据时,有的文本内容是同一类目,但是由于手工输入错误  或者大小写的问题,可能会造成将产品分到不同的类目下,这时候就需要对数据进行清洗。如何实现快速比较,找出错误值呢?下面我们就介绍一个新的库,当当当~~~~~~~~就是它-------------->difflib

上例子吧:

1)打印数据

 可以看到“CarName”这一列,有各种品牌及型号。考虑到数据量大,现在我们只处理品名。

2)查看是否存在异常数据

#1.2.2 查看汽车名称是否有异常
car_name = data['CarName'].str.split(expand =True)[0]
print(set(car_name))

 通过打印的结果,确实存在我们担心的问题,但是品牌数量比较多,需要快速定位错误值。

3)引入difflib.SequenceMatcher(a=i, b=j).quick_ratio(),返回相似度

import difflib
list1 =car_name.unique().tolist() # 将名称去重,转为列表形式new_list = []  # 用于存放相似的名称
for i in range(0,len(list1)):   a= list1[i]for j in  range(i+1,len(list1)):b= list1[j]differ = difflib.SequenceMatcher(a=a, b=b).quick_ratio()if 0.7<differ<1:  # 将相似度在0.7-1之间的名称追加到列表中new_list.append(a)new_list.append(b)
print(new_list)

打印结果:

         从第三步的打印结果,可以看出,在CarName  中属于同一种品牌的是以上五种。我们结合第二步的结果,发现vm  和volkswagen也是同一品牌。

4)替换错误值

new_name = {'Nissan':'nissan','maxda':'mazda','toyouta':'toyota','vokswagen':'volkswagen','vw':'volkswagen','porcshce':'porsche'}
data['CarCompany'] = data['CarName'].str.split(expand =True)[0]
data['CarCompany'] = data['CarCompany'].replace(new_name) # 替换
data

打印结果:

 完成~

这个需求的核心就是引入了difflib库,得到了文本的相似度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/18873.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring接收前端传递数据的方式

搭建项目 然后点击下一步完成即可搭建成功 在pom文件中导入lombok的jar包,帮助我们快速创建实体类 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.16</version> </dependency&…

《C语言初阶篇》循环语句还没搞懂?这篇文章带你轻松学会循环语句!

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏:《快速入门C语言》《C语言初阶篇》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 前言&#x1f4ac; 循环语句的介绍&#x1f4ac; while 语句的介绍&#x1f4ad; while中的break&#x1f4ad;…

css 字体间距 设置

一、css word-spacing属性设置字间距&#xff08;单词的间距&#xff09; word-spacing 属性增加或减少单词间的空白&#xff08;即字间隔&#xff09;&#xff1b;在这个属性中&#xff0c;“字” 定义为由空白符包围的一个字符串。也就是说该属性是以空格为基准进行调节间距…

ProtoBuf的学习并且制作了一个网络通讯录项目

Linux环境下载安装ProtoBuf编译器 1. 安装依赖库 Ubuntu用户选择 sudo apt-get install autoconf automake libtool curl make g unzip -yCentos用户选择 sudo yum install -y autoconf automake libtool curl make gcc-c unzip2. 下载ProtoBuf编译器 Github地址&#xff…

力扣 53. 最大子数组和

题目来源&#xff1a;https://leetcode.cn/problems/maximum-subarray/description/ C题解&#xff08;来源代码随想录&#xff09;&#xff1a;难点在于判断什么时候更新count。 是当nums[i]为正数吗&#xff1f;那要nums没有正数怎么办&#xff1b; 是当nums[i]比之前子数组…

Github Pages

官方教程&#xff1a;https://pages.github.com/ 1 创建仓库 命名为 你的名字.github.io 克隆项目 git clone https://github.com/username/username.github.io加入index.html页面 在克隆的项目中&#xff0c;加入一个index.html html文件简单写几个dom <!DOCTYPE html…

java的静态代码块

java的静态代码块用static声明&#xff0c;在类被加载的时候调用。可以包含多个静态代码块&#xff0c;按照出现的顺序执行。静态代码块可以用来对类变量初始化。 代码示例&#xff1a; package com.thb;import java.nio.channels.spi.SelectorProvider;public class Test1 {…

Linux Vim提示:E325: ATTENTION 解决方案

提示&#xff1a; 这是由于我们异常退出vim界面 程序异常关闭导致的 解决&#xff1a; 在这种情况下&#xff0c;您可以根据以下选项来解决问题&#xff1a; [O]pen Read-Only&#xff1a;以只读模式打开文件。这意味着您不能编辑文件&#xff0c;但可以查看其内容。选择此选…

Java安全——基于密码的加密

Java安全 基于密码的加密 基于密码加密和SSL加密的区别 密码加密可以数据和密码分离传输SSL只限于在套接字空间传输的数据进行加密 SSL和密码加密 密码加密是指通过算法将原始信息转换成密文&#xff0c;只有知道相应密钥的人才能解密。Java中常用的密码加密算法包括MD5、SHA、…

走进Linux世界【二、VM与Linux安装】

第二章 VM与Linux安装 1、安装VMware ​ 这里安装Vm主要是为了安装Linux系统&#xff0c;除了相对云服务器&#xff0c;比较大众化的操作&#xff0c;当然更多的是熟悉Linux操作 1、Windows安装 ​ (1) 下载链接&#xff0c;目前版本上下载VM15的版本即可https://www.vmwar…

两个分数比较大小

解决问题&#xff1a; 对于分子和分母的数据范围过大 导致化成小数进行比较大小的时候 存在精度丢失&#xff0c;不能比较的情况 为此进行算式变形推出 故采用如下自定义函数&#xff1a; ll bj(ll fz1,ll fm1,ll fz2,ll fm2){//分母相等if(fm1 fm2){return fz1-fz2;}//分…

GPT(Generative Pre-Training)论文解读及实现(一)

1 GPT Framework 1.1 Unsupervised pre-training Given an unsupervised corpus of tokens U {u1, . . . , un}, we use a standard language modeling objective to maximize the following likelihood: 在给定语料上下文环境下&#xff0c;目标时最大化下面的语言模型&…