用正则从pandas.DataFrame的列中提取字符

最近在学习数据挖掘,拿了泰坦尼克号的先练练手,在网上找了一圈,发现很多人发的都是同一个版本的数据和代码,一顿学习下来,发现上面有很多问题,大致有4类的:

  • 相关的模块库版本太低了
  • 局部有一些错误
  • 不完整
  • 冗长

由于是边看边跑边改,没有每一步都做记录,后续有学习相关内容的同学可以自己感受一下吧。

今天主要来分享一个关于旅客按名字归类的问题处理

先上一下原处理方法:

import pandas as pd
import numpy as np
path_train = r'train.csv'
data_train = pd.read_csv(path_train)

#处理一下名字,生成Title字段
title_list=['Mrs', 'Mr', 'Master', 'Miss', 'Major', 'Rev',
            'Dr', 'Ms', 'Mlle','Col', 'Capt', 'Mme', 'Countess',
            'Don', 'Jonkheer']

def substrings_in_string(big_string, substrings):
    for substring in substrings:
        # -1是没有匹配到
        if big_string.find(substring) != -1:
            return substring
    print(big_string)
    return np.nan
data_train['Title']=data_train['Name'].map(lambda x: substrings_in_string(x, title_list))
data_train

就是定义一个处理名字的函数,然后通过map()函数进行修改。逻辑还算挺简单,就是有点长。

其实这个substrings_in_string()函数的处理逻辑就是从名字中提取一些字符,然后返回。转变为pandas处理逻辑就是从DataFrame的列中值中返回指定的一个字符。所以直接定义一些规则对列值进行字符的匹配,匹配上返回就可以了。

字符匹配,这是正则的拿手戏,接下介绍的这个方法就是通过正则进行匹配并返回匹配值。使用extract()函数实现,处理逻辑只需要一行代码即可,代码如下:

# 调库和读取数据
import pandas as pd
path_train = r'train.csv'
data_train = pd.read_csv(path_train)

# 处理代码
data_train['Title'] = data_train['Name'].str.extract(r'(Mrs|Mr|Master|Miss|Major|Rev|Dr|Ms|Mlle|Col|Capt|Mme|Countess|Don|Jonkheer)',expand=False)

传送门:

train.csv(仅含旅客ID和名字)资源链接

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xin学数据

为你点亮一盏灯,愿你前进无阻。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值