1.背景

Titanic存活率预测案例:

# 读取数据
df_train = pd.read_csv("./data/train.csv")
df_train.head()

OUT:

乘客姓名重复度太低,不适合直接使用。而姓名中包含Mr. Mrs. Dr.等具有文化特征的信息,可将之抽取出来:

# 定义一个抽取方法
def GetMiddleStr(content):
startStr = ','
endStr = '.'
startIndex = content.index(startStr)
if startIndex>=0:
startIndex += len(startStr)
endIndex = content.index(endStr)
content = content[startIndex:endIndex]
return content df_train["Name"] = df_train["Name"].apply(GetMiddleStr)
df_train['Name'].unique()

OUT:

array([' Mr', ' Mrs', ' Miss', ' Master', ' Don', ' Rev', ' Dr', ' Mme',
' Ms', ' Major', ' Lady', ' Sir', ' Mlle', ' Col', ' Capt',
' the Countess', ' Jonkheer'], dtype=object)

通过replace()方法将上面得到的头衔缩小类别。

2.BUG复现

df_train["Name"] = df_train["Name"].replace(['Lady','the Countess','Capt','Col',\
'Don','Dr','Major','Rev','Sir',\
'Jonkheer','Dona'],'Rare')
df_train["Name"] = df_train["Name"].replace('Mlle','Miss')
df_train["Name"] = df_train["Name"].replace('Ms','Miss')
df_train["Name"] = df_train["Name"].replace('Mme','Mrs') df_train['Name'].unique()

OUT:

array([' Mr', ' Mrs', ' Miss', ' Master', ' Don', ' Rev', ' Dr', ' Mme',
' Ms', ' Major', ' Lady', ' Sir', ' Mlle', ' Col', ' Capt',
' the Countess', ' Jonkheer'], dtype=object)

3.原因

在Python中字符串是immutable对象,是不可变对象。所以string使用replace需要重新赋值,生成一个新的对象。(即replace函数返回一个新值,不改变原来str的值,所以输出的仍为原结果)

4.解决

不能直接调用replace(),需要转为字符串,才可以对元素的部分内容进行修改

df_train["Name"] = df_train["Name"].str.replace('Mlle','Miss')

但是此方法代码中传入replace“被替换的值”不支持传入列表,仅支持传入单个字符串

如,以下代码将会报错:

df_train["Name"] = df_train["Name"].str.replace(['Lady','the Countess','Capt','Col',\
'Don','Dr','Major','Rev','Sir',\
'Jonkheer','Dona'],'Rare')

Python之replace()方法失效的更多相关文章

  1. python字符串replace()方法

    python字符串replace()方法 >>> help(str.replace)Help on method_descriptor:replace(...)    S.repla ...

  2. Python string replace 方法

    Python string replace   方法 方法1: >>> a='...fuck...the....world............' >>> b=a ...

  3. 20191213用Python实现replace方法

    def myReplace(s,sub, dest, times =None): #如果times是None,替换的次数是s.count(sub) if times == None: times = ...

  4. Python replace()方法

    描述 Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次. 语法 replace()方法语法: st ...

  5. python中的replace()方法的使用

    python中的replace()方法的使用 需求是这样的:需要将字符串的某些字符替换成其他字符 str.replace(old,new,max) 第一个参数是要进行更换的旧字符,第二个参数是新的子串 ...

  6. python字符串replace失效问题

    python字符串replace替换无效 背景 今天想把一个列表中符合条件的元素中 替换部分字符串, 发现怎么替换,改元素还是没有改变,本以为是内存引用的问题后来发现并不然. 经查阅解决 在Pytho ...

  7. Python中的replace方法

    replace 方法:返回根据正则表达式进行文字替换后的字符串的复制. stringObj.replace(rgExp, replaceText) 参数 stringObj必选项.要执行该替换的 St ...

  8. Python replace方法并不改变原字符串

    直接给出结论:replace方法不会改变原字符串. temp_str = 'this is a test' print(temp_str.replace('is','IS') print(temp_s ...

  9. Python数据类型及其方法详解

    Python数据类型及其方法详解 我们在学习编程语言的时候,都会遇到数据类型,这种看着很基础也不显眼的东西,却是很重要,本文介绍了python的数据类型,并就每种数据类型的方法作出了详细的描述,可供知 ...

随机推荐

  1. 飞扬起舞,基于.Net Cli亲手打造.Net Core团队的项目脚手架

    什么是脚手架? Scaffolding is a meta-programming method of building database-backed software applications. ...

  2. 企业该选择什么样的CRM系统

    不论您是需要CRM系统来优化业务流程,还是准备更换一款新的CRM系统,在这之前都应该先明确企业的需求,并了解CRM的哪些功能能够对企业有所帮助.例如,企业的管理者想了解每个销售人员的业绩情况,那么就应 ...

  3. 学会这些CSS技巧让你写样式更加丝滑

    目录 1,前言 1,calc() 2,min() 3,max() 4,clamp() 5,gap 6,writing-mode 1,前言 记录一些很好用的css属性 1,calc() calc()函数 ...

  4. Spring 依赖注入(DI) 的三种方式 和 对集合类型的注入

    // 分别省略了getter setter public class Student { private String name; private int age; private Teacher t ...

  5. Ubuntu创建图标

    起因 安装一些软件时,总是没有图标,导致无法固定到docky栏,所以极为不方便,所以需要自己创建图标. 操作 以创建微信图标为例 [Desktop Entry] Name=Wecaht #名字 Com ...

  6. Linux安装telnet(转)

      一.安装telnet 1.检测telnet-server的rpm包是否安装 [root@localhost ~]# rpm -qa telnet-server 若无输入内容,则表示没有安装.出于安 ...

  7. linux学习之路第七天(搜索查找类指令详解)

    搜索查找类 1.find指令 find指令将从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示终端. ~基本语法 find [搜索范围] [选项] ~选项说明 应用案例 案例1 :按文件 ...

  8. 【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码逐步最终源端

    问题描述 在使用Azure Function App的SendGrid Binging功能,调用SendGrid服务器发送邮件功能时,有时候遇见间歇性,偶发性异常.在重新触发SendGrid部分的Fu ...

  9. HCNA Routing&Switching之动态路由基本概念

    前文我们了解了静态路由的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14965433.html:今天我们来聊一聊动态路由相关概念: 首先我们要清楚什 ...

  10. C语言:赋值语句

    赋值语句 1.赋值号:= 2.赋值号具有方向性,只能将右边的常数 变量的值  表达式的值赋值给左边的变量 3.赋值号左边只能是变量,不能是表达式.常数.符号常量.常量 如下列是非法的语句:a+b=3; ...