当前位置: 首页 > article >正文

df.replace({‘b‘: r‘\s*\.\s*‘}, {‘b‘: np.nan}, regex=True)

这段代码 df.replace({'b': r'\s*\.\s*'}, {'b': np.nan}, regex=True) 是用来在 DataFrame 中替换列 'b' 中的空白字符(包括空格、制表符等)加上点(.)的值,替换成 NaN

详细解析:

  1. df.replace():这是 Pandas 中的 replace() 方法,用于替换 DataFrame 中的值。

  2. 第一个字典 ({'b': r'\s*\.\s*'}):这个字典表示需要进行匹配和替换的模式:

    • 'b':表示列名 'b',即替换操作会作用于这一列。

    • r'\s*\.\s*':这是一个正则表达式模式,用于匹配列 'b' 中的值。具体来说:

      • \s*:表示零个或多个空白字符(空格、制表符等)。
      • \.:表示字面上的点字符 (.),因为点在正则表达式中有特殊含义,所以需要使用反斜杠 \ 来转义。
      • \s*:表示零个或多个空白字符,匹配点后面的空白部分。

      这个正则表达式会匹配类似于 " . "" ."" . " 这样的字符串,即点(.)前后可以有空白字符。

  3. 第二个字典 ({'b': np.nan}):这是替换的目标值:

    • 'b':仍然指列名 'b'
    • np.nan:表示用缺失值(NaN)来替换匹配到的内容。
  4. regex=True:这个参数告诉 replace() 方法,在替换时使用正则表达式进行匹配。

整体操作:

该代码会在 DataFrame 的 'b' 列中,查找所有含有零个或多个空白字符和一个点(.)的值,并将其替换为 np.nan(即缺失值)。

示例:

假设你有如下的 DataFrame:

import pandas as pd
import numpy as np

# 示例 DataFrame
df = pd.DataFrame({
    'a': [1, 2, 3],
    'b': [' . ', 'x', ' .']
})

# 使用 replace() 方法替换
df = df.replace({'b': r'\s*\.\s*'}, {'b': np.nan}, regex=True)

print(df)

输出:

   a    b
0  1  NaN
1  2    x
2  3  NaN

解释:

  • 在列 'b' 中," . "" ." 被匹配并替换为 NaN
  • 其他值(如 'x')保持不变。

\s这里的s和是什么意思

在正则表达式中,\s* 是一个组合模式,包含了两个部分:

  1. \s:表示一个空白字符(whitespace character)。它可以匹配以下几种字符:

    • 空格(' '
    • 制表符(Tab,\t
    • 换行符(\n
    • 回车符(\r
    • 垂直制表符(\v
    • 换页符(\f
  2. *:表示前面元素的重复零次或多次(zero or more)。也就是说,它会匹配零个或多个空白字符。

所以,\s* 组合在一起表示:

  • 零个或多个空白字符,包括空格、制表符、换行符等。

举个例子:

假设我们要匹配包含零个或多个空白字符的文本,比如 " "" ""\t" 或者没有空白字符的文本。

  • \s* 会匹配以下内容:

    • " "(一个空格)
    • "\t"(一个制表符)
    • "\n"(一个换行符)
    • ""(空字符串,也就是没有空白字符)
  • 它不会匹配普通的非空白字符(如字母或数字)。

示例:

如果我们有如下的文本:

import re

text = "   .  . \t. "
pattern = r'\s*\.\s*'

matches = re.findall(pattern, text)
print(matches)

输出结果:
在这里插入图片描述

解释:

  • \s* 匹配了点前后的空白字符,匹配的内容包括空格、制表符等。
  • 所以 \s*\.\s* 可以匹配所有点(.)前后有零个或多个空白字符的情况。

总结:

  • \s:匹配任何空白字符(空格、制表符等)。
  • *:表示重复零次或多次。
  • \s*:匹配零个或多个空白字符。

http://www.kler.cn/a/464920.html

相关文章:

  • 每天你好20250105(距离春节24天!!!)
  • Spring系列一:spring的安装与使用
  • 【工具推荐】XSS 扫描器-XSStrike
  • Spring Boot 3.3.4 升级导致 Logback 之前回滚策略配置不兼容问题解决
  • MySQL 05 章——排序与分页
  • Scrum中敏捷项目经理(Scrum Master)扮演什么角色?
  • (六)vForm 动态表单(数据量大,下拉选卡顿问题)
  • C# 服务调用RFC函数获取物料信息,并输出生成Excel文件
  • 【商业化】【微软商店】微软打包时报找不到img/logo.ico
  • java class类对象 加载时机
  • 深度学习blog- 数学基础(全是数学)
  • 【每日学点鸿蒙知识】组件对象做参数、2D在子线程中使用、Tabs组件联动、Web组件获取焦点、Text加载藏文
  • EasyPlayer.js RTSP流重连问题的说明
  • Unity2D无限地图的实现(简单好抄)
  • 【Docker】:Docker命令及平台基本使用方法
  • C++ 空类大小
  • Tailwind CSS 实战:动画效果设计与实现
  • el-table 实现纵向多级表头
  • canvas+fabric实现时间刻度尺+长方形数据展示
  • QT--------网络
  • 电脑中缺失的nvrtc64_90.dll文件如何修复?
  • uni-ui样式修改
  • SpringCloudAlibaba实战入门之Sentinel服务降级和服务熔断(十五)
  • AWS EMR上的Spark用Kafka搜集大数据日志Tableau报表展示的设计和实现
  • nacos 笔记2-配置中心
  • 使用CSS 和 JavaScript 实现鼠标悬停时图片放大、缩小和抖动