今日锦囊
怎么通过正则提取字符串里的指定内容?
这个正则表达式在我们做字符提取中是十分常用的,先前有一篇文章有介绍到怎么去使用正则表达式来实现我们的目的,大家可以先回顾下这篇文章。
我们还是用一下泰坦尼克号的数据集,大家可以在下面的链接去下载数据哈。
Titanic数据集下载:
https://www.kaggle.com/c/titanic/data
# 导入相关库
import pandas as pd
import numpy as np
from pandas import Series,DataFrame
import re
# 导入泰坦尼的数据集
data_train = pd.read_csv("./data/titanic/Train.csv")
data_train.head()
我们现在可以提取下这name
里的称谓,比如Mr、Miss之类的,作为一个新列,代码如下:
data['Title'] = data['Name'].map(lambda x: re.compile(", (.*?)\.").findall(x)[0])
data.head()
我们之前看这代码其实有点懵的,不过这是因为大家可能对正则表达式的规则不太熟悉,所以下面有几个相关的可以参考下。
import re
str = 'xxdaxxabxxacabxxcdabddbxxssbdffbggxx'
# 一个'.'就是匹配\n(换行符)以外的任何字符
print(re.findall(r'a.b',str))
# 一个'*'前面的字符出现0次或以上
print(re.findall(r'a*b',str))
# 匹配从.*前面的字符为起点,到后面字符为终点的所有内容,直到返回所有
print(re.findall(r'xx.*xx',str))
# 非贪婪,和上面的一样,不过是用过一次就不会再用,,以列表的形式返回
print(re.findall(r'xx.*?xx',str))
# 非贪婪,与上面是一样的,只是与上面相比,多了一个括号,只保留括号中的内容
print(re.findall(r'xx(.*?)xx',str))
# 保留a,b中间的内容
print(re.findall(r'xx(.+?)xx',str))
print(re.findall(r'xx(.+?)xx',str)[0])
所以,看了这些后,应该就可以理解上面的pattern的含义了!
往 期 锦 囊
特征锦囊:特征无量纲化的常见操作方法
特征锦囊:怎么进行多项式or对数的数据变换?
特征锦囊:常用的统计图在Python里怎么画?
特征锦囊:怎么去除DataFrame里的缺失值?
特征锦囊:怎么把被错误填充的缺失值还原?
特征锦囊:怎么定义一个方法去填充分类变量的空值?
特征锦囊:怎么定义一个方法去填充数值变量的空值?
特征锦囊:怎么把几个图表一起在同一张图上显示?
特征锦囊:怎么把画出堆积图来看占比关系?
特征锦囊:怎么对满足某种条件的变量修改其变量值?
原创不易,如果觉得这种学习方式有用,希望可以帮忙随手转发or点下“在看”,这是对我的极大鼓励!阿里嘎多!????