数据常见的提取和筛选方法

    平时对于一些不标准的数据,需要提取或者筛选其中的部分数据。本文主要分享一些常用的办法,同时也作为一个笔记的备份。

1. 正则表达式

    正则表达式比较适合提取有明确类型的数据,比如字母,数字,汉字,日期等,同时也可以提取具有一定规律特征的数据。常见的用法如下:

import re

text = '2023-11-01,AAaa产品净值上涨1%,详细内容见《产品周报》'
# 提取数字
get_num = re.findall(r'\d+', text)
# 提取汉字
get_chinese = re.findall(r'[\u4e00-\u9fa5]+', text)
# 提取字母,不区分大小写
get_letter = re.findall(r'[a-zA-Z]', text)
# 提取日期
get_date = re.search(r'\d{4}-\d{2}-\d{2}', text)[0]
# 提取指定部分--使用'(.*?)?'表示需查找部分
find_str = '《(.*?)》'
get_part = re.findall(find_str, text)

2. 分割提取

   分割提取是根据数据的某个标志,将数据切割为列表,然后载提取相关的数据,常见函数为split.

name = '20230101-举例asd基金(000001)-三级估值表.xlsx'

    如上,name是一个基金的估值表文件,需要提取的字符为‘举例asd基金’,如果使用正则表达式也可以获取(先提取不同类型的数据,然后再进行拼接),但是步骤比较繁琐,同时泛化能力不强。因此,需要使用其他办法。

   第一步,通过‘-’进行切割,可以得到一个列表(含三个元素):

first = name.split('-')
print(first)

  对应的结果是:

  接下来,取first里面的第二个元素,然后通过‘(’ ,进行切割,得到一个新列表,新列表的第一个元素就是所需字符。

second = first[1].split('(')[0]
print(second)

   对应的结果为:

3.模糊匹配

   可能出现相关数据与需求并非一对一的情形,可以考虑退求其次,使用模糊匹配来进行提取。

import pandas as pd
df = pd.DataFrame({'名称':['xx-举例如何1号基金','随意取名2号基金','举例随心1号基金','xx-随意命名1号基金']})

    如上,需要筛选出名称里面含有‘举例’二字的基金。使用正则和分割均难以实现。因此考虑使用是否包含的思路(如果是单一字符串循环,则使用‘in’来判断):

new_df = df.loc[df['名称'].str.contains('举例')]

对应的结果:

   还是上述的例子,如果需要匹配的字段为‘随心1号’,前文的办法就行不通了。这个情况下可以使用fuzz来匹配。

from fuzzywuzzy import fuzz
print(fuzz.ratio('举例随心1号基金','随心1号'))

   fuzz.ratio输出两个字符串的相似度(按字符串顺序),上述代码对应结果为67,即'举例随心1号基金'和'随心1号'有67%的相似度。依照此方法,可以计算df['名称']的数据与‘随心1号’的相似度,取出满足相似度(大于50%)的数据:

for name in df['名称']:
    rate = fuzz.ratio(name,'随心1号')
    if rate>=50:
        print('匹配字段为:{},相似度为{},符合条件!'.format(name,rate))
    else:
        print('匹配字段为:{},相似度为{},不符合条件!'.format(name,rate))

  对应的结果为:

  关于每种方式,还有许多功能,此处只分享一些常见功能,有需求者可进一步探索。

  本期分享结束,有何问题欢迎交流。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python自动化测试实战 —— WebDriver API的使用

软件测试专栏 感兴趣可看:软件测试专栏 自动化测试学习部分源码 python自动化测试相关知识: 【如何学习Python自动化测试】—— 自动化测试环境搭建 【如何学习python自动化测试】—— 浏览器驱动的安装 以及 如何更…

Python中的TesserOCR:文字识别的全方位指南

更多资料获取 📚 个人网站:ipengtao.com 文字识别在图像处理领域中起到了至关重要的作用,而TesserOCR(Tesseract OCR的Python封装)为开发者提供了一个强大的工具,使得文字识别变得更加便捷。本文将通过详细…

MATLAB 最小二乘直线拟合方法二 (36)

MATLAB 最小二乘直线拟合方法二 (36) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 这里介绍另一种拟合直线点云的方法,更为简单方便,结果与前者一致,主要内容直接复制代码使用即可,原理简单看代码即可,下面是具体的实现和拟合结果展示 二、算法实现 1.代码 代…

死锁的概念

死锁(Deadlock)、饥饿(Starvation)和死循环(Infinite Loop)是计算机科学中与并发和并行处理相关的三个概念,它们描述了不同类型的问题和情况。 死锁(Deadlock): 定义: 死…

纯前端使用XLSX导出excel表格

1 单个sheet page.js(页面中的导出方法) import { exportExcel } from ../../../utils/exportExcel.js; leadOut() {const arr [{ id: 1, name: 张三, age: 14, sex: 男 },{ id: 2, name: 李四, age: 15, sex: 女 },{ id: 3, name: 王五, age: 16, sex: 男 },];const allR…

全志V3s之U-Boot

1、安装交叉编译器: ARM交叉编译器的官网:交叉编译器 a、使用wget下载: wget https://releases.linaro.org/components/toolchain/binaries/latest/arm-linux-gnueabihf/gcc-linaro-6.3.1-2017.05-x86_64_arm-linux-gnueabihf.tar.xzb、解…

数据结构从入门到入土——初识泛型

目录 一,包装类 1.基本数据类型和对应的包装类 2.装箱和拆箱 3.自动装箱和自动拆箱 二,什么是泛型? 三,引出泛型 语法 四,泛型类的使用 1.语法 2.类型推导(Type Inference) 五,裸类型(Raw Type) …

Mybatis的foreach标签的使用以及参数的含义

Mybatis的foreach标签的使用以及参数的含义 语法格式: 属性说明: collection属性的注意点:

【UE5.1】套用小白人蓝图,让玩家控制MetaHuman移动

效果 步骤 1. 新建一个工程,创建Basic关卡,添加第三人称游戏资源到内容浏览器 2. 打开Quixel Bridge 选择高质量,然后添加创建好的MetaHuman到内容浏览器 启用所有缺失 立即重启 添加完毕后内容浏览器会多出“MetaGumans”文件夹&#xff0…

字符处理 C语言xdoj52

问题描述 从键盘输入一个字符,若为小写字母,则输出其对应的大写字母;若为大写字母,则输出对应的小写字母;其他字符原样输出。 输入说明 输入一个字符 输出说明 输出一个字符 输入样例 样例1输入 a 样例…

再回首感知损失在low-level上的应用

《Perceptual Losses for Real-Time Style Transfer and Super-Resolution》是李飞飞团队在2016年发表于ECCV的文章。我近几年的工作中,所训练的模型都离不开感知损失。不得不感慨,大佬之所以是大佬,就是因为他们开创性的工作很多年后依然为人…

生成树基本实验

背景 某公司的二层交换网络中,为了提高网络可靠性,故在二层交换网络中增加冗余链路。为了阻 止冗余链路可能带来的广播风暴,MAC地址漂移等负面影响,需要在交换机之间部署生成树 协议。 实验 一.配置stp en 开启 stp en stp …

2021实战面试

1、Rem , em , px , % , vw 之间的区别 PX: px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。 em: 1,子元素字体大小的em是相对于父元素字体大小 2,元素的width/height/padding/margin用em的话是相对于该元素的font-size rem:1rem是…

计算机毕业设计 SpringBoot的供应商管理系统 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

Kafka-集群架构设计

Kafka的Zookeeper元数据梳理 zookeeper整体数据 Kafka将状态信息保存在Zookeeper中,这些状态信息记录了每个Kafka的Broker服务与另外的Broker服务 有什么不同。通过这些差异化的功能,共同体现出集群化的业务能力。这些数据,需要在集群中各个…

道路清障车行业分析:中国市场发展趋势研究

清障车全名为道路清障车,又称拖车、道路救援车、拖拽车,具有起吊、拽拉和托举牵引等多项功能,清障车主要用于道路故障车辆,城市违章车辆及抢险救援等。清障车按类别主要分为:拖吊连体型、拖吊分离型,一拖一…

leetcode---904. 水果成篮 -- 【滑动窗口/c++】

原题:904. 水果成篮 - 力扣(LeetCode) 题目解析: 本题中的fruit数组中的元素表示的是数的种类。如示例1,fruit【1,2,1】就表示下标0处有1号类型的树,下标1处有2号类型的树,下标2处有1号类型的…

智能优化算法应用:基于狮群算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于狮群算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于狮群算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.狮群算法4.实验参数设定5.算法结果6.参考文献7.MA…

TSINGSEE青犀基于EasyCVR与AI技术的高校实验室视频可视化监管方案

一、行业背景 实验室作为科研、教学过程中的一个重要场所,其管理也十分至关重要。尤其是高校实验室安全问题,教育部《高等学校实验室安全规范》中说明,需要进一步加强高校实验室的安全管理工作,实现规范化、常态化的管理体制&…

C++ Qt开发:如何使用信号与槽

在Qt中,信号与槽(Signal and Slot)是一种用于对象之间通信的机制。是Qt框架引以为傲的一项机制,它带来了许多优势,使得Qt成为一个强大且灵活的开发框架之一。信号与槽的关联通过QObject::connect函数完成。这样的机制使…