从pandas.DataFrame的列中提取字符

从pandas.DataFrame的列中提取字符,第1张

最近在学习数据挖掘,拿了泰坦尼克号的先练练手,在网上找了一圈,发现很多人发的都是同一个版本的数据和代码,一顿学习下来,发现上面有很多问题,大致有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的列中值中返回指定的一个字符。


所以直接定义一些规则对列值进行字符的匹配,匹配上返回就可以了。


字符匹配,这是正则的拿手戏,接下介绍的这个方法就是通过正则进行匹配并返回匹配值。


处理逻辑只需要一行代码即可,代码如下:

# 调库和读取数据
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和名字)资源链接

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/577977.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-11
下一篇 2022-04-11

发表评论

登录后才能评论

评论列表(0条)

保存