python替换—Series.replace()与Series.str.replace()的区别及为何replace()无效的解决方法

news2024/11/19 6:43:36

文章目录

  • 前言
  • 一、Series.replace()方法
  • 二、Series.str.replace()方法
  • 三、replace()与str.replace() 使用方法的区别
  • 四、常见的坑:python中replace方法不起作用


前言

在Pandas中,Series是一个由一维数组表示的DataFrame列,而replace和str.replace是Series对象的两种方法。虽然它们的名称相似,并且都用于替换Series的值,但实际上它们之间存在不同之外。


一、Series.replace()方法

函数语法:

Series.replace(to_replace=None, value=None, inplace=False, limit=None, regex=False, method=‘pad’,)

参数说明:

参数描述
to_replace被替换的值
value替换后的值
inplace是否要改变原数据,False是不改变,True是改变,默认是False。
limit控制填充次数。
regex是否使用正则,False是不使用,True是使用,默认是False。
method填充方式,pad,ffill,bfill分别是向前,向前,向后填充。

replace() 是一个大范围的值替换,第一个参数指定要替换的值 ,可以是标量、列表、字典或正则表达式。第二个参数指定用于替换匹配值的新值。

import pandas as pd
data = pd.DataFrame({'A': [1, 80, 4],
                     'B': [9, 80, 5],
                     'C': ['foo','another foo bar','baz']})
print("data:\n", data)
print("data.dtypes:\n", data.dtypes)

#用dict进行单值、多值填充
data['C'].replace({'foo':'hello'}) #将C列中的foo替换成hello。
data['C'].replace({'foo':'hello','baz':'bus'}) #将C列中的foo替换成hello,baz替换成bus。
data.replace({1,9},{'a','b'}) #1被a替换,9被b替换。

#用list进行单值、多值填充
data['C'].replace(['foo','baz'])#将C列中的foo替换成hello。
data['C'].replace(['foo','baz'],['hello','bus']) #将C列中的foo替换成hello,baz替换成bus。
data.replace([1,9],'b')  #1,9都被b替换。

#替换全部
data.replace(80,8)

#某一列或者某几列
data['B'].replace(9,20) #将B列中的9替换成20。
data[['A','B']].replace(80,8) #将A、B列中的9替换成20。

#某一行或者某几行
data.iloc[1].replace(80,8) #第二行的80替换成8。
data.iloc[0:1].replace(80,8) #第一、二行的80替换成8。

#inplace=True,改变原数据
data.replace(80,8,inplace=True)
data.iloc[0:1].replace(80,8,inplace=True)

二、Series.str.replace()方法

函数语法:

Series.str.replace(pat, repl,n=-1,case=None,flags=0,regex=None)

参数说明:

参数描述
pat要查找的字符串,string,不可省略的参数。
repl替换的字符串,string,可以调用函数,不可省略的参数。
n要进行替换的次数,默认全部。
case是否区分大小写。
flagsre模块中的标志。如re.IGNORECASE。
regex是否设置为正则表达式,False是不使用,True是使用,默认是True。

str.replace() 仅用于字符串匹配和替换,接受两个参数,第一个参数指定要替换的模式,仅限于正则表达式,第二个参数指定要用于替换的字符串。

import pandas as pd
data = pd.DataFrame({'A': ['1', '2', '4'],
                     'B': ['2023/9/9', '2023/8/8','2023/5/4'],
                     'C': ['FOO','ANOther foo bar','BAZ']})
print("data:\n", data)
print("data.dtypes:\n", data.dtypes)

#普通替换
data['C'].str.replace('FOO','foo') #将C列中FOO替换成foo。

#正则表达式的替换
data['B'].str.replace('[/]','-')

#预编译好的正则表达式替换
import pandas as pd 
import re 
pat=re.compile('[/]')
data['B'].str.replace(pat,'-')

#函数替换
data['C'].str.replace('[A-Z]',lambda x:x.group().lower()) #将C列中大写字母替换成小写字母。

三、replace()与str.replace() 使用方法的区别

1、replace()方法可以用于数字、布尔值和任何可替换的数据类型,而str.replace()方法仅适用于字符串

举例1
要求:将整个dataframe中数据列B的9替换成20,使用replace()方法。

import pandas as pd
data = pd.DataFrame({'A': ['1', '2', '4'],
                     'B': [9, 80, 5],
                     'C': ['FOO','ANOther foo bar','BAZ']})
print("data:\n", data)
print("data.dtypes:\n", data.dtypes)

运行结果:

data:
   A   B                C
0  1   9              foo
1  2  80  another foo bar
2  4   5              baz
data.dtypes:
A    object
B     int64
C    object
dtype: object
data['B'].replace(9,20)

运行结果:

0    20
1    80
2     5
Name: B, dtype: int64

举例2
要求:将整个dataframe中数据列B的9替换成20,使用str.replace()方法。

data['B'].str.replace(9,20)

运行结果:

在这里插入图片描述
我们可以看数据列B是int64数据类型,因此直接使用str.replace() 会报以下错误提示,因为str.replace()只针对字符串数据类型的列有效。


2、replace()方法可以一次为多个列工作,如果有需要,可以对整个DataFrame的值进行替换。

举例1
要求:将整个dataframe中的9替换成90,使用replace()方法。

import pandas as pd
data = pd.DataFrame({'A': [9, 20, 40],
                     'B': [9, 80,5],
                     'C': ['foo','another foo bar','baz']})
print("data:\n", data)
print("data.dtypes:\n", data.dtypes)

print(data.replace({'foo':'hello',9:'bus'})) #将C列中的foo替换成hello,A、B列中9替换成bus。

运行结果:

     A    B                C
0  bus  bus            hello
1   20   80  another foo bar
2   40    5              baz
print(data.replace(9,90)) #将整个dataframe中的9替换成90

运行结果:

    A   B                C
0  90  90              foo
1  20  80  another foo bar
2  40   5              baz

举例2
要求:将整个dataframe中的9替换成90,使用str.replace()方法。

import pandas as pd
data = pd.DataFrame({'A': ['9', '20', '40'],
                     'B': ['9', '80','5'],
                     'C': ['foo','another foo bar','baz']})
print("data:\n", data)
print("data.dtypes:\n", data.dtypes)

data.str.replace('9','90')
data.str.replace({'foo':'hello','9':'bus'})

使用str.replace对整个dataframe进行替换会报以下错误提示。
在这里插入图片描述


3、replace()方法可以一次执行多个独立的替换,str.replace()方法一次只可以替换一件事。

举例1
要求:将整个dataframe中的数据列C中foo替换成text1,bar替换成text2。

import pandas as pd
data = pd.DataFrame({'A': ['9', '20', '40'],
                     'B': ['9', '80','5'],
                     'C': ['foo','another foo bar','baz']})
print("data:\n", data)
print("data.dtypes:\n", data.dtypes)
  • 使用replace()方法:
data['C'].str.replace('foo','text1').str.replace('bar','text2')

运行结果:

0                  text1
1    another text1 text2
2                    baz
Name: C, dtype: object
  • 使用str.replace()方法:
#更好的表达方式
data['C'].replace({'foo': 'text1', 'bar': 'text2'}, regex=True)

data['C'].replace('foo','text1',regex=True).replace('bar','text2'}, regex=True)

运行结果:

0                  text1
1    another text1 text2
2                    baz

4、replace()方法是默认regex=False,str.replace()方法是默认启用正则表达式替换。两者方法默认行为的差异:

  • 子字符串替换,str.replace()方法将替换每次出现的子字符串,replace() 方法默认情况下只会执行全字匹配
  • 正则表达式替换,replace()方法除非您指定 regex=True,否则将第一个参数解释为正则表达式的str.replace()方法恰恰相反。注意:replace()方法的regex=True只有在进行字符串替换才有效,例如data.replace({‘foo’:‘hello’,9:‘bus’}, regex=True)是无效的。

举例1

import pandas as pd
data = pd.DataFrame({'A': ['9', '20', '40'],
                     'B': ['9', '80','5'],
                     'C': ['foo','another foo bar','baz']})
print("data:\n", data)
print("data.dtypes:\n", data.dtypes)

要求:将字符串foo全部替换字符串text1。

data['C'].replace('foo','text1') #默认情况下,只会执行对foo全字匹配替换。
data['C'].replace('foo','text1',regex=True) #regex=True情况下,每次出现的子字符串foo都会被替换为text1。
data['C'].str.replace('foo','text1') #默认情况下,每次出现的子字符串foo都会被替换为text1。

运行结果1:
在这里插入图片描述
运行结果2:
在这里插入图片描述
运行结果3:

在这里插入图片描述


四、常见的坑:python中replace方法不起作用

导入数据

import os
import pandas as pd 
import numpy as np
#读取文件
def read_file(filepath):
    os.chdir(os.path.dirname(filepath))
    return pd.read_csv(os.path.basename(filepath),encoding='utf-8')
file_pos="F:\\python_test\\data_1.csv"
data_pos=read_file(file_pos)
data_pos

在这里插入图片描述

查看数据情况

data_pos.dtypes

运行结果:
在这里插入图片描述

举例1
要求:将2021金额与2022金额的 ¥ 与 , 这两个等号替换为空。

问题:使用replace无效。

def convert_currency(value):
	'''
	移除不是数字字符 ¥,
	'''
	new_value=value.replace({',':'','¥':''})
	return new_value

#调用函数
a=convert_currency(data_pos['2021金额'])
a

运行结果:
在这里插入图片描述

解决方案

  • 方法一:
def convert_currency(value):
	'''
	移除不是数字字符 ¥,
	'''
	new_value=value.replace({',':'','¥':''},regex=True)
	return new_value

#调用函数
a=convert_currency(data_pos['2021金额'])
a
  • 方法二:
def convert_currency(value):
	'''
	移除不是数字字符 ¥,
	'''
	new_value=value.str.replace(',','').str.replace('¥','')
	return new_value

#调用函数
a=convert_currency(data_pos['2021金额'])
a

运行结果:

在这里插入图片描述


参考文章:

https://blog.csdn.net/m0_62011685/article/details/124716966?ydreferer=aHR0cHM6Ly9jbi5iaW5nLmNvbS8%3D
https://www.cnblogs.com/cgmcoding/p/13362539.html
https://www.coder.work/article/1269173
https://geek-docs.com/pandas/pandas-questions/419_pandas_what_is_the_difference_between_seriesreplace_and_seriesstrreplace.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/928049.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

借助流程引擎表单,一举创造高效率办公流程化管理!

办公流程化管理,是很多企业的追求目标和发展愿景。如何实现这一目标?如何让企业内部的数据更好地实现价值,创造辉煌前景?借助流程引擎表单,可以助力企业实现高效率办公,让每一个表单制作场景更为顺畅和高效…

Redis 重写 AOF 日志期间,主进程可以正常处理命令吗?

重写 AOF 日志的过程是怎样的? Redis 的重写 AOF 过程是由后台子进程 bgrewriteaof 来完成的,这么做有以下两个好处。 子进程进行 AOF 重写期间,主进程可以继续处理命令请求,从而避免阻塞主进程子进程带有主进程的数据副本。这里…

Verilog 实现状态机自动售卖机

Verilog 实现状态机自动售卖机 教学视频:https://www.bilibili.com/video/BV1Ve411x75W?p33&spm_id_frompageDriver&vd_source19ae31dff4056e52d2729a4ca212602b 功能需求 使用1元、2元、5元面值的纸币进行支付,获取6元的物品,不设…

天津大数据培训机构 全面分析大数据怎么样?

数字化和信息化时代的发展,推动了大数据的高速发展,在这个大数据时代的浪潮中,越来越多人加入到大数据培训,都希望在大数据培训机构中学习最前沿的知识。 大数据人才行业需求 大数据行业近年来仍然呈现出增长态势,并…

Linux centos7 bash编程小训练

训练要求: 求比一个数小的最大回文数 知识点: 一个数字正读反读都一样,我们称为回文数,如5、11、55、121、222等。 我们训练用bash编写一个小程序,由我们标准输入一个整数,计算机将显示出一个比这个数小…

相对位置关系对排斥能的影响

( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入只有3个节点,AB训练集各由5张二值化的图片组成,让A中有2个1,B中有1个1,且不重合,排列组合,统计迭代次数并排序。 其中有5组数据 构造平均列A 构造平均…

SPI总线协议

简述 SPI协议是一种芯片与芯片之间的通讯,全称是Serial Peripheral Interface SPI通讯采用一主多从模式,产生时钟的一侧称为主机,另一侧称为从机。只有一个主机(一般来说可以是微控制器/MCU),但是可以有一…

不要“妖魔化”外包,看完我悟了......

在IT圈子里,经常能看到一个很有意思的现象,对于外包工作,不同看法的网友们常常吵的不可开交。 新人程序员试图从“前辈”的经验中找出答案,以作为自己要不要去外包公司的参考,但往往刷帖无数,却依旧举棋不…

element 下拉组件获取对象

// 选择数据user:[{name:"小白",id:1,money:"100",love:"蛋糕"},{name:"小黑",id:2,money:"200",love:"奶茶"},{name:"小红",id:3,money:"300",love:"烧烤"},] <div><el…

2023年高教社杯数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

Splashtop 荣获“年度远程学习解决方案提供商”奖

在当今时代&#xff0c;远程学习已不仅仅是一种趋势&#xff0c;而且已成为教育框架的重要组成部分&#xff0c;教育机构和公司必须坚持以创新、效率和安全为先导。 Splashtop 从众多科技导向解决方案中脱颖而出&#xff0c;取得了非凡的成绩。我们郑重宣布&#xff0c;Splash…

Windows系统下,将文件夹中文件名字全部复制提取出来

一、使用命令提示符&#xff08;Command Prompt&#xff09;&#xff1a; 1、打开文件夹&#xff0c;确保你所需的文件都在该文件夹中。 2、在文件夹的路径栏中&#xff0c;输入 “cmd” 并按下 Enter 键&#xff0c;以打开命令提示符并将其当前路径设置为所选文件夹的路径。 …

安全测试二:跨站请求伪造漏洞(修改Referer测试)

安全测试二&#xff1a;跨站请求伪造漏洞 使用工具修改Referer测试 使用工具 使用BurpSuite2023&#xff0c;安装教程参考&#xff1a; 下载安装教程 修改Referer测试 如请求地址为&#xff1a;https://www.baidu.com/修改Referer值&#xff0c;实际是修改url中的IP/域名值&…

盖雅工场获评2023年度苏州市服务型制造示范企业(平台)

苏州市工信局公布 2023年度苏州市服务型制造示范企业&#xff08;平台&#xff09;名单 遴选出服务型制造示范企业34家 服务型制造示范平台19个 苏州盖雅信息技术有限公司 “劳动力管理SaaS云平台服务” 获评2023年度苏州市服务型制造示范平台 全市唯一获评的人力资源服务…

初探802.11协议(4)——Wi-Fi QoS

目录 一. QoS引入 二. QoS机制 2.1 IEEE 802.11e 2.1.1 802.11e与WMM 2.1.2 详细说明​ 2.1.2.1 QoS Control 2.1.2.2 TC 2.1.2.3 TS 2.2 WFA QoS Management 2.2.1 MSCS 2.2.2 DSCP​​​​​​​ 三. 影响QoS机制的因素分析 小结 REF 一. QoS引入 由初探802.…

被控诉不正当竞争,李跳跳宣布无限期停更

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 互联网巨头再次推出力作&#xff1a;律师函寄给李跳跳的作者。原因是李跳跳通过无障碍模式帮助用户点击“跳过广告”按钮&#xff0c;给企业的广告投放业务造成了损失。通过屏蔽、过滤腾X浏览器的广…

KiCad 已经打开 交错保存 错误

期望结果&#xff1a; 打开工程 .pro 文件后&#xff0c;双击工程文件列表中的的 原理图&#xff1a;*.kicad_sch 能够打开原理图。 实际结果&#xff1a; 打开工程 .pro 文件后&#xff0c;双击工程文件列表中的的 原理图&#xff0c;弹出错误提示框如下&#xff1a; 重现步…

docker在阿里云上的镜像仓库管理

目录 一.登录进入阿里云网站&#xff0c;点击个人实例进行创建 二.创建仓库&#xff0c;填写相关信息 三.在访问凭证中设置固定密码用于登录&#xff0c;登录时用户名是使用你注册阿里云的账号名称&#xff0c;密码使用设置的固定密码 四.为镜像打标签并推送到仓库 五.拉取…

滚珠螺杆导程对精度有影响吗?

滚珠螺杆的导程也称螺距&#xff0c;即螺杆每旋转一周螺母直线运动的距离&#xff0c;导程与直线速度有关&#xff0c;在输入转速一定的情况下&#xff0c;导程越大速度越快。正常来说&#xff0c;选择导程时&#xff0c;尽量选5和10最好。 很多人一直觉得导程会影响滚珠螺杆的…

2023科隆游戏展:虚幻5游戏百花齐放,云渲染助力虚幻5高速渲染

8月23日&#xff0c;欧洲权威级游戏展示会——科隆游戏展拉开帷幕。今年的参展游戏也相当给力&#xff0c;数十款游戏新预告片在展会上公布&#xff0c;其中有不少游戏使用虚幻5引擎制作&#xff0c;开创了游戏开发新纪元。 虚幻5游戏百花齐放&#xff0c;渲染堪比电影级效果 …