24_Pandas.DataFrame,Series元素值的替换(replace)

2023-10-30

24_Pandas.DataFrame,Series元素值的替换(replace)

要替换pandas.DataFrame,pandas.Series元素的值,请使用replace()方法。

这里,将描述以下内容。

  • 替换元素
  • 一次替换多个不同的元素
    • 在字典中指定
    • 在列表中指定
    • 注意点
  • 通过指定目标列进行替换
  • 用正则表达式替换
  • 替换缺失值NaN
  • 变更原始项目

以下面的数据为例。一些元素的值已更改以作说明。

import pandas as pd

df = pd.read_csv('./data/24/sample_pandas_normal.csv')
df.iloc[1, 3] = 24
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     24
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

该示例为pandas.DataFrame,但pandas.Series相同。

替换元素

在第一个参数中指定原始元素的值,在第二个参数中指定替换后的值。

print(df.replace('CA', 'California'))
#       name  age       state  point
# 0    Alice   24          NY     64
# 1      Bob   42  California     24
# 2  Charlie   18  California     70
# 3     Dave   68          TX     70
# 4    Ellen   24  California     88
# 5    Frank   30          NY     57

包括所有列元素。如果您只想替换特定列的值,请参见下文。

print(df.replace(24, 100))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA    100
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57

默认情况下,将返回带有替换元素的新DataFrame,但是如果参数inplace = True,则将更改原始DataFrame。最后,我将介绍一个示例。

一次替换多个不同的元素

如果要一次替换多个不同的元素,则可以使用字典或列表。

在字典中指定

在第一个参数中指定{原始值:替换后的值}的字典。

print(df.replace({'CA': 'California', 24: 100}))
#       name  age       state  point
# 0    Alice  100          NY     64
# 1      Bob   42  California    100
# 2  Charlie   18  California     70
# 3     Dave   68          TX     70
# 4    Ellen  100  California     88
# 5    Frank   30          NY     57

在列表中指定

在第一个参数中指定原始值列表,在第二个参数中指定替换值列表。如果列表的大小(元素数)不匹配,则会发生错误。

print(df.replace(['CA', 24], ['California', 100]))
#       name  age       state  point
# 0    Alice  100          NY     64
# 1      Bob   42  California    100
# 2  Charlie   18  California     70
# 3     Dave   68          TX     70
# 4    Ellen  100  California     88
# 5    Frank   30          NY     57

# print(df.replace(['CA', 24, 'NY'], ['California', 100]))
# ValueError: Replacement lists must match in length. Expecting 3 got 2 

如果将标量值指定为第二个参数,则所有元素都将替换为该值。

print(df.replace(['CA', 24], 'XXX'))
#       name  age state point
# 0    Alice  XXX    NY    64
# 1      Bob   42   XXX   XXX
# 2  Charlie   18   XXX    70
# 3     Dave   68    TX    70
# 4    Ellen  XXX   XXX    88
# 5    Frank   30    NY    57

注意点

注意多个替换对之间的原始值和替换值是否相同。由于值是按顺序替换的,因此替换的值会进一步替换。结果取决于顺序。

字典示例。

print(df.replace({'CA': 'NY', 'NY': 'XXX'}))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42   XXX     24
# 2  Charlie   18   XXX     70
# 3     Dave   68    TX     70
# 4    Ellen   24   XXX     88
# 5    Frank   30   XXX     57

print(df.replace({'NY': 'XXX', 'CA': 'NY'}))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42    NY     24
# 2  Charlie   18    NY     70
# 3     Dave   68    TX     70
# 4    Ellen   24    NY     88
# 5    Frank   30   XXX     57

字典的顺序在Python 3.7之后得以保留,但在早期版本中未定义。它并不总是看起来像上面的结果。如果要明确指定顺序,请重复调用replace()。

print(df.replace({'NY': 'XXX'}).replace({'CA': 'NY'}))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42    NY     24
# 2  Charlie   18    NY     70
# 3     Dave   68    TX     70
# 4    Ellen   24    NY     88
# 5    Frank   30   XXX     57

在列表中,第一个元素将首先被替换。当顺序很重要时,使用列表比使用字典更容易。

print(df.replace(['CA', 'NY'], ['NY', 'XXX']))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42   XXX     24
# 2  Charlie   18   XXX     70
# 3     Dave   68    TX     70
# 4    Ellen   24   XXX     88
# 5    Frank   30   XXX     57

print(df.replace(['NY', 'CA'], ['XXX', 'NY']))
#       name  age state  point
# 0    Alice   24   XXX     64
# 1      Bob   42    NY     24
# 2  Charlie   18    NY     70
# 3     Dave   68    TX     70
# 4    Ellen   24    NY     88
# 5    Frank   30   XXX     57

通过指定目标列进行替换

通过将{列名称:{原始值:替换后的值}}的字典指定为第一个参数,只能替换目标列的元素。您可以通过增加字典元素的数量来一次替换多个列和多个值。

print(df.replace({'age': {24: 100}}))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA     24
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57

print(df.replace({'age': {24: 100, 18: 0}, 'point': {24: 50}}))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA     50
# 2  Charlie    0    CA     70
# 3     Dave   68    TX     70
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57

无法在列表中指定原始值和替换后的值。

# print(df.replace({'age': [[24, 18], [100, 0]], 'point': {24: 50}}))
# TypeError: If a nested mapping is passed, all values of the top level mapping must be mappings

如果要用相同的值替换所有值,请在第一个参数中指定{column name:original value}字典,并在替换后的第二个参数中以标量值指定值。可以将第一个参数的原始值指定为列表。

print(df.replace({'age': 24, 'point': 70}, 100))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA     24
# 2  Charlie   18    CA    100
# 3     Dave   68    TX    100
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57

print(df.replace({'age': [24, 18], 'point': 70}, 100))
#       name  age state  point
# 0    Alice  100    NY     64
# 1      Bob   42    CA     24
# 2  Charlie  100    CA    100
# 3     Dave   68    TX    100
# 4    Ellen  100    CA     88
# 5    Frank   30    NY     57

用正则表达式替换

正则表达式可以与参数regex = True一起使用。

例如,默认情况下,仅在元素值完全匹配时才替换元素值,因此即使它们部分匹配,也不会替换它们。

print(df.replace('li', 'LI'))
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     24
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

例如,如果要替换元素的部分字符串,则使用参数regex = True将其设置为正则表达式。

()中包含的部分可以在替换后按顺序用作组,例如\ 1和\ 2。

print(df.replace('(.*)li(.*)', r'\1LI\2', regex=True))
#       name  age state  point
# 0    ALIce   24    NY     64
# 1      Bob   42    CA     24
# 2  CharLIe   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

当regex = True时,将正则表达式模式指定为第一个参数,将替换后的字符串指定为第二个参数。

如果要替换特定列元素的一部分字符串,也可以使用字符串方法str.replace()。

df['name'] = df['name'].str.replace('li', 'LI')
print(df)
#       name  age state  point
# 0    ALIce   24    NY     64
# 1      Bob   42    CA     24
# 2  CharLIe   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

详情请参阅以下文章

替换缺失值NaN

提供了一种名为fillna()的方法来替换缺失值NaN。

尽管可以使用replace(),但fillna()可以根据行或列替换不同的值。

详情请参阅以下文章

变更原始项目

默认情况下,将返回带有替换元素的新DataFrame,但是如果参数inplace = True,则将更改原始DataFrame。

df = pd.read_csv('./data/24/sample_pandas_normal.csv')
print(df)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

df.replace('CA', 'California', inplace=True)
print(df)
#       name  age       state  point
# 0    Alice   24          NY     64
# 1      Bob   42  California     92
# 2  Charlie   18  California     70
# 3     Dave   68          TX     70
# 4    Ellen   24  California     88
# 5    Frank   30          NY     57
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

24_Pandas.DataFrame,Series元素值的替换(replace) 的相关文章

随机推荐

  • Vue3描述列表(Descriptions)

    整体功能效果与 ant design vue 保持高度一致 包含两种组件 Descriptions 和 DescriptionsItem 必须搭配使用 效果如下图 在线预览 APIs Descriptions 参数 说明 类型 默认值 必传
  • 解决4G网络移动打不开网站,WiFi可以正常访问

    一 解决4G网络移动打不开网站 WiFi可以打开1 把域名放进http ping chinaz com 看看解析IP延迟是否过高2 询问WiFi能打开网站 4G网络打不开网站的人 是不是本地网络出问题或者只有移动4g 其他运营商是不是都能访
  • esxi 无盘服务器,用ipxe网络启动打造无盘ESXi系统

    一 源码与链接 几个相关链接 相关源码 二 编译一个带 iSCSI 和 COMBOOT 功能的 iPXE 固件 这个参考 ipxe 官网或 iPXE 编译增加功能与自定义脚本 进行编译 在我的源码 netboot tftp 中有编译好可用的
  • MySQL高级篇(逻辑架构、存储引擎、用户与权限管理、索引优化、慢查询日志、主从复制等)

    MySQL高级 1 MySQL逻辑架构 1 1 概览 1 1 1 连接层 1 1 2 服务层 1 1 3 引擎层 1 1 4 存储层 1 2 查看SQL的执行周期 1 3 查询流程 1 4 SQL执行顺序 2 MySQL存储引擎 2 1 查
  • 百分百全开源的ERP项目,太赞了

    大家好 我是小编南风吹 每天推荐一个小工具 源码 装满你的收藏夹 让你轻松节省开发效率 实现不加班不熬夜不掉头发 今天小编推荐一款基于SpringBoot框架和SaaS模式的ERP 目前专注进销存 财务 生产功能 主要模块有零售管理 采购管
  • MySQL的字段属性,以及存储引擎和字符集

    目录 1 字段属性 1 1 zerofill 填充0 1 2 primary key 主键 1 3 auto increment 1 4 not null 1 5 foreign key 外键 1 6 comment 1 7 default
  • 5.类和对象的创建

    文章目录 1 面向过程和面向对象的理解 2 类和对象的理解 3 类和对象的创建 1 面向过程和面向对象的理解 1 二者都是一种思想 面向对象是相对于面向过程而言的 面向过程 强调的是功能行为 以函数为最小单位 考虑怎么做 面向对象 将功能封
  • 用Python手撸一个神经网络

    单隐藏层神经网络的实现 用Python实现用于分类任务的简单神经网络 神经网络简述 编程弯路 从矩阵视角看神经网络 反向传播及其实现 效果测试 用神经网络解决更复杂的分类任务 结语 用Python实现用于分类任务的简单神经网络 一年前接触
  • 分类算法概述

    摘 要 分类是数据挖掘 机器学习和模式识别中一个重要的研究领域 通过对当前数据挖掘中具有代表性的优秀分类算法进行分析和比较 总结出了各种算法的特性 为使用者选择算法或研究者改进算法提供了依据 1 概述分类是一种重要的数据挖掘技术 分类的目的
  • MIUI解BL锁失败

    最后解决办法是 换USB 2 0接口 分析问题 或许可能是软件兼容性不好 USB3 0影响读取设备信息 导致无法解锁
  • 基于战争策略算法优化的BP神经网络(预测应用) - 附代码

    基于战争策略算法优化的BP神经网络 预测应用 附代码 文章目录 基于战争策略算法优化的BP神经网络 预测应用 附代码 1 数据介绍 2 战争策略优化BP神经网络 2 1 BP神经网络参数设置 2 2 战争策略算法应用 4 测试结果 5 Ma
  • 运算放大器的应用之:T形电阻网络公式的三种推导方法

    上面公式怎么推导 推导1 根据KCL KVL定律 当Vi单独作用时 当VREF单独作用时 根据叠加定理得 推导2 利用戴维宁定理推导 如下图所示 在A B处把电路断开 然后 利用戴维宁定理 得到如下等效电压及等效电阻 把输出电路替换成戴维宁
  • 实现快速排序

    原理 找出一个数字 然后从该数列的右边找一个数比该数字大的第一个数 填入该数的位置中去 然后又从左往右找第一个数大于或等于该数字的数 然后填入上一个数的位置中去 也就是上一次找比该数字大的第一个数的位置中去 直到i和j 相遇就停止循环 再排
  • 追尾事故降发生:超低功耗滴滴桔视ADAS落地实践

    桔妹导读 道路交通事故每年都给人类带来巨大的生命和财产损失 滴滴作为交通领域的深度参与者 不断地探索降低交通事故的方法 本文重点介绍车载视觉团队是如何在滴滴的场景下 在桔视设备上 使用超低功耗的桔视ADAS 高级辅助驾驶系统 技术 降低交通
  • 计算机系统大作业

    摘 要 本文对hello c在Linux下的生命周期进行了分析 通过一些Linux平台的工具 如gcc objdump edb gdb readelf对程序代码的预处理 编译 汇编 链接 反汇编的过程进行了分析 对比 通过hello在she
  • 我曾经喜欢夏天

    我小时候在农村长大 夏末初秋时节 在农村院子里躺在凉席上 听大人讲他们一天的收获和明天的计划 夜风吹来树叶沙沙作响 夜空中繁星点点 偶尔飞过一两只飞鸟 发出清脆的声音 那些夜里 我要么抱着一个井里冰镇过的大西瓜 大块朵颐 要么啃着一根自家地
  • Linux yum提示Loaded plugins 错误的解决办法

    在Linux中使用yum时出现错误信息 Loaded plugins fastestmirror langpacks Existing lock var run yum pid another copy is running as pid
  • GPT3动口,RT-1动手,智能机器人开卷; 代码开源!

    机器学习 ML 研究的多个子领域 例如计算机视觉和自然语言处理 的最新重大进展是通过一种共享的通用方法实现的 该方法利用大型 多样化的数据集和能够有效吸收所有数据的表达模型 尽管已经有各种尝试将这种方法应于机器人技术 但机器人尚未利用高性能
  • 数图互通高校学生宿舍管理中会细分为哪些模块?

    数图互通学生宿舍管理系统 功能模块包括 基础数据 在线选宿舍 学生入住 宿舍调整 学生退宿 学生社区评定 外来人员来访管理 物品出楼登记 归寝管理 异性来访登记 宿舍维修管理 宿舍收费管理 辅导员管理 综合查询 统计报表
  • 24_Pandas.DataFrame,Series元素值的替换(replace)

    24 Pandas DataFrame Series元素值的替换 replace 要替换pandas DataFrame pandas Series元素的值 请使用replace 方法 这里 将描述以下内容 替换元素 一次替换多个不同的元素