pandas.Series.replace函数用法及常用的正则表达式汇总

pandas.Series.replace 参数信息

参数列表:
  • to_replace: str, regex, list, dict, Series, int, float, 或 None

    • 需要被替换的值。
    • 数值、字符串或正则表达式:数值将替换等于to_replace的值,字符串将替换完全匹配to_replace的值,正则表达式将替换匹配to_replace的值。
    • 列表:如果to_replace和value都是列表,它们必须长度相同。如果regex=True,则两个列表中的字符串都将被解释为正则表达式。
    • 字典:可以指定不同的替换值对应不同的现有值。例如,{‘a’: ‘b’, ‘y’: ‘z’}将值‘a’替换为‘b’,将‘y’替换为‘z’。
    • None:如果regex是一个字符串、编译的正则表达式或这样的元素的列表、字典、ndarray或Series,to_replace必须是None。
  • value: scalar, dict, list, str, regex,默认为None

    • 用于替换匹配to_replace的值。
    • 对于DataFrame,可以使用字典值指定每列的替换值。
  • inplace: bool,默认为False

    • 如果为True,则在原地进行操作并不返回任何内容。
  • limit: int,默认为None

    • 向前或向后填充的最大大小差距。(已在2.1.0版本中弃用)
  • regex: bool或与to_replace相同类型的值,默认为False

    • 是否将to_replace和/或value解释为正则表达式。或者,这可以是一个正则表达式或列表、字典或数组中的正则表达式,在这种情况下to_replace必须是None。
  • method: ‘pad’, ‘ffill’, ‘bfill’

    • 当to_replace是标量、列表或元组且value是None时,用于替换的方法。(已在2.1.0版本中弃用)
返回值:
  • Series/DataFrame:替换后的Series或DataFrame对象。

使用方法

Series.replace 方法用于动态替换Series或DataFrame中的值。这与使用.loc.iloc更新不同,后者需要你指定要更新的位置和值。

具体示例

示例1:标量to_replace和value
import pandas as pd

s = pd.Series([1, 2, 3, 4, 5])
result = s.replace(1, 5)
print(result)

输出:

0    5
1    2
2    3
3    4
4    5
dtype: int64
示例2:列表like to_replace
df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
                  'B': [5, 6, 7, 8, 9],
                  'C': ['a', 'b', 'c', 'd', 'e']})
result = df.replace([0, 1, 2, 3], 4)
print(result)

输出:

    A  B  C
0  4  5  a
1  4  6  b
2  4  7  c
3  4  8  d
4  4  9  e
示例3:dict-like to_replace
result = df.replace({0: 10, 1: 100})
print(result)

输出:

        A  B  C
0   10  5  a
1  100  6  b
2    2  7  c
3    3  8  d
4    4  9  e
示例4:正则表达式to_replace
df = pd.DataFrame({'A': ['bat', 'foo', 'bait'],
                  'B': ['abc', 'bar', 'xyz']})
result = df.replace(to_replace=r'^ba.$', value='new', regex=True)
print(result)

输出:

        A    B
0   new  abc
1   foo  new
2  bait  xyz
示例5:使用正则表达式替换多个值
result = df.replace(regex=[r'^ba.$', 'foo'], value='new')
print(result)

输出:

    A    B
0  new  abc
1  new  new
2  bait  xyz
示例6:使用字典进行正则表达式替换
result = df.replace(regex={r'^ba.$': 'new', 'foo': 'xyz'})
print(result)

输出:

    A    B
0  new  abc
1  xyz  new
2  bait  xyz
示例7:理解s.replace({'a': None})s.replace('a', None)的区别
s = pd.Series([10, 'a', 'a', 'b', 'a'])
result1 = s.replace({'a': None})
print(result1)

输出:

0      10
1    None
2    None
3       b
4    None
dtype: object
result2 = s.replace('a', None)
print(result2)

输出:

0      10
1    None
2    None
3       b
4    None
dtype: object
示例8:当regex=Truevalue不是None时,替换将应用于所有列
df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
                  'B': ['a', 'b', 'c', 'd', 'e'],
                  'C': ['f', 'g', 'h', 'i', 'j']})
result = df.replace(to_replace='^[a-g]', value='e', regex=True)
print(result)

输出:

    A  B  C
0  0  e  e
1  1  e  e
2  2  e  h
3  3  e  i
4  4  e  j
示例9:如果value不是Noneto_replace是一个字典,字典的键将是DataFrame中需要替换的列
result = df.replace(to_replace={'B': '^[a-c]', 'C': '^[h-j]'}, value='e', regex=True)
print(result)

输出:

    A  B  C
0  0  e  f
1  1  e  g
2  2  e  e
3  3  d  e
4  4  e  e

replace方法非常灵活,可以根据需要进行各种复杂的替换操作。
以下是一些常用的正则表达式及其说明,适用于字符串匹配和搜索:

常用正则表达式

  1. 匹配任意字符

    • .:匹配除换行符以外的任何单个字符。
  2. 匹配数字

    • \d:匹配任何数字,等价于 [0-9]
    • \D:匹配任何非数字字符。
  3. 匹配字母

    • \w:匹配任何字母数字字符(字母、数字和下划线),等价于 [a-zA-Z0-9_]
    • \W:匹配任何非字母数字字符。
  4. 匹配空白字符

    • \s:匹配任何空白字符(空格、制表符、换行符等)。
    • \S:匹配任何非空白字符。
  5. 匹配开头和结尾

    • ^:匹配字符串的开头。
    • $:匹配字符串的结尾。
  6. 匹配特定字符

    • [abc]:匹配字符 a、b 或 c 中的任意一个。
    • [^abc]:匹配除 a、b、c 之外的任何字符。
    • [a-z]:匹配小写字母 a 到 z。
    • [A-Z]:匹配大写字母 A 到 Z。
    • [0-9]:匹配数字 0 到 9。
  7. 数量修饰符

    • *:匹配前面的表达式零次或多次。
    • +:匹配前面的表达式一次或多次。
    • ?:匹配前面的表达式零次或一次。
    • {n}:匹配前面的表达式恰好 n 次。
    • {n,}:匹配前面的表达式至少 n 次。
    • {n,m}:匹配前面的表达式至少 n 次,但不超过 m 次。
  8. 分组和选择

    • (abc):匹配字符串 “abc”。
    • a|b:匹配字符 a 或 b。
  9. 转义字符

    • \:用于转义特殊字符,例如 \. 匹配字面上的点字符。
  10. 其他常用模式

    • \b:匹配单词边界。
    • \B:匹配非单词边界。
    • (?i):使后面的匹配不区分大小写。

示例

  • 匹配邮箱地址

    [a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
    
  • 匹配 URL

    https?://[^\s/$.?#].[^\s]*
    
  • 匹配日期(YYYY-MM-DD)

    \d{4}-\d{2}-\d{2}
    
  • 匹配电话号码

    \d{3}-\d{3}-\d{4}  # 格式: 123-456-7890
    

下面是一些常用的正则表达式。

常用的正则表达式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考链接:

正则表达式教程
常用正则表达式及正则在线检查

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值