python非法表达式_第010篇:正则表达式在Pandas中的应用

d8aa359a58168be24bd8cafd3590e6d0.png
# 导入pandas
import pandas as pd

数据如下:

file_info = [
 {'id': 'CCH204',
  'email': 'cchippendale0@instagram.com',
  'date': '06/07/8020',
  'mac': 'BA:1C:99:10:4A:D3',
  'file_name': 'TempusSemper.avi',
  'url': 'http://sohu.com',
  'time12': '6:25 PM',
  'time24': '20:22',
  'numbers': 559,
  'html': '<address>'},
 {'id': 'JMU2^^',
  'email': 'jmusk1@netscape.com',
  'date': '07/21/2020',
  'mac': 'EA:33:74:C3:64:FB',
  'file_name': 'NisiNam.jpeg',
  'url': 'http://imgur.com',
  'time12': '12:05 AM',
  'time24': '3:40',
  'numbers': 570,
  'html': '</ul>'},
 {'id': 'SSH279',
  'email': 'ssherbrooke2@list-manage_com',
  'date': '09/12/2019',
  'mac': '1C:FD:AF:07:FE:42',
  'file_name': 'UltriciesEuNibh.mp3',
  'url': 'http://ihg.com',
  'time12': '5:58 AM',
  'time24': '9:51',
  'numbers': -977,
  'html': '<op^group>'},
 {'id': 'RBO218',
  'email': 'rboustead3@shutterfly.com',
  'date': '07/25/2020',
  'mac': '96:95:30:D9:D1:15',
  'file_name': 'MusEtiamVel.mp3',
  'url': 'http://umn_edu',
  'time12': '7:28 PM',
  'time24': '4:27',
  'numbers': 685,
  'html': '<^body>'},
 {'id': 'ZFA290',
  'email': 'zfabri4@biblegateway_com',
  'date': '10/13/2019',
  'mac': '00:2B:B1:3C:36:79',
  'file_name': 'Penatibus.tiff',
  'url': 'https://gizmodo.com',
  'time12': '13:70 PM',
  'time24': '1:10',
  'numbers': 919,
  'html': '<kbd>'}
]

建立一个DataFrame

df = pd.DataFrame(file_info)

看一下数据

f992a7a3d7444edaba7d18c936c25a3f.png

我发现第一条记录的date有错,日期写成了8020年,根据前面的知识,我们很容易修改这个错误。

cdcac24854ce88604320ae5b93ae9ffa.png

不过如果数据真的只有这么少,我想大家不介意直接把源数据修改一下。

在实际应用中,我们要处理的数据是几万、几十万条,所以这样的操作是不行的。复杂的条件判断和数据梳理离不开正则表达式,我们今天就来看看正则表达式在Pandas中的应用。

我们要找出数据中所有的图片记录:

pattern = r'(?i)(w+).(jpeg|jpg|png|gif|tiff|svg)$'

df82['file_name'].str.contains(pattern,regex=True).value_counts()

这里用到了DataFrame的contains包含函数和value_ccounts()的统计函数。

44546845724a0bf6587765f708e377d5.png

能够看到结果是有两条记录符合条件,另外3条不符合,返回了False。

这两个函数会经常配合使用,咱们再来看看id以A-R开头的记录都有哪些?

fb0cde36857e78ba92bb36cfe6bb787b.png

公司几千上万人怎么检查资料是否合法呢?来看一个email合法检查的例子。

pattern = r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$)"

这是一个标准的正则表达式,我相信很多人都用它练习过如何取得email地址。

ac2a59b1202ad83e2ea8265fdc711409.png

这样的判断在Python中的常用形式。

那么这样的正则表达式在Pandas中是如何应用的呢?

c69b66cd6d1e31eaa7fcbaf5bba1f772.png

只需要在contains()中加入pattern实例就可以了,如同在Python中一样自由。

一共5条记录,其中有3条记录的email地址是合法的,那么另外两条呢?怎样选出非法的记录?

f49f77fb527a2216bdc37122123a5b8b.png

注意观察,我在前面的基础上加了”~“字符,还记得Python中”~“代表什么吗?是”非“运算,如同in和not in一样,与”&“或”|“和”~“操作存在于所有高级语言。

我们可以把以前学习Python正则表达式时做的练习都拿过来试试。

比如:

7861104f996d92789b293c9a60622efe.png

上面是合法的网址,下面则是不合法的。

1284845e7fe191dc533f4a9537b9fe8b.png

筛查数据是否合法

be98910bef7c8c1d50a5d9123f3a1551.png

此处注意:numbers是整型,参与字符判断要转换为字符串astype(str)就是类型转换函数。

输出为4条记录,还有一条可能有问题,我们来看看。

f26a178d68f4d063d9e268d9a89a5d03.png

原因是这条数据是负数。在实际工作中对数字的要求不完全一样,你可以尝试调整pattern实例。

当然,如果你只想选出负数来,也可以这样。

90d4daf29a1c0054e1572b3c7e7e9766.png

正确的做法是允许正负数存在。

pattern = '^-{0,1}d+$'

这是标准的数据选取实例。

由于数据可能是小数,我给出小数的正负判断实例,你可以在自己的数据中尝试。

正数

pattern = '^d*.{0,1}d+$'

负数

pattern = '^-d*.{0,1}d+$'

所有合法数据

pattern = '^-{0,1}d*.{0,1}d+$'

上来我们就提到的日期合法性

pattern = '^(0[1-9]|1[0-2])/(0[1-9]|1d|2d|3[01])/(19|20)d{2}$'

对12小时制的判断

pattern = r'^(1[012]|[1-9]):[0-5][0-9](s)?(?i)(am|pm)$'

这是24小时制的判断

pattern = r'^([0-1]{1}[0-9]{1}|20|21|22|23):[0-5]{1}[0-9]{1}$'

这些知识都是在Python学习中我们接触过的,大家可以利用上面给出的,并结合自己工作数据的特点进行练习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
正则表达式pandas有多种用途。首先,可以使用`str.contains()`方法来判断一个字符串是否包含某个正则表达式的模式。例如,`df\['name'\].str.contains('i.e', regex=False)`可以用来判断DataFrame的'name'列是否包含'i.e'这个字符串,其`regex=False`表示不使用正则表达式的特殊字符。\[1\] 另外,pandas还提供了一些字符串方法,如`str.endswith()`、`str.startswith()`和`str.match()`,可以根据指定的条件提取符合条件的字符串。这些方法可以用于提取部分匹配的行。\[2\] 此外,如果想要替换字符串的特定模式,可以使用Python的re模块的`re.sub()`函数。该函数可以根据正则表达式的模式来替换字符串的内容。例如,`re.sub(r'\*(\[^\*\]+)\*', r'\1', string)`可以将字符串以星号包围的内容替换为内容本身。\[3\] 综上所述,正则表达式pandas可以用于判断字符串是否包含某个模式、提取符合条件的字符串以及替换字符串的内容。 #### 引用[.reference_title] - *1* *2* [pandas 通过正则表达式查询和筛选](https://blog.csdn.net/cuisidong1997/article/details/129695891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [python 正则表达式参数替换实例详解 python使用正则表达式替换txt内容](https://blog.csdn.net/weixin_39976382/article/details/116188435)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值