最近在学习数据挖掘,拿了泰坦尼克号的先练练手,在网上找了一圈,发现很多人发的都是同一个版本的数据和代码,一顿学习下来,发现上面有很多问题,大致有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)
传送门:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/66967.html