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:

python 复制代码
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"(一个换行符)
    • ""(空字符串,也就是没有空白字符)
  • 它不会匹配普通的非空白字符(如字母或数字)。

示例:

如果我们有如下的文本:

python 复制代码
import re

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

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

输出结果:

解释:

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

总结:

  • \s:匹配任何空白字符(空格、制表符等)。
  • *:表示重复零次或多次。
  • \s*:匹配零个或多个空白字符。
相关推荐
小彭律师1 小时前
数字化工厂中央控制室驾驶舱系统架构文档
python
old_power3 小时前
【Python】PDF文件处理(PyPDF2、borb、fitz)
python·pdf
测试开发Kevin3 小时前
从投入产出、效率、上手难易度等角度综合对比 pytest 和 unittest 框架
python·pytest
强化学习与机器人控制仿真3 小时前
Newton GPU 机器人仿真器入门教程(零)— NVIDIA、DeepMind、Disney 联合推出
开发语言·人工智能·python·stm32·深度学习·机器人·自动驾驶
Tiny番茄4 小时前
No module named ‘xxx’报错原因及解决方式
开发语言·python
老朋友此林5 小时前
MiniMind:3块钱成本 + 2小时!训练自己的0.02B的大模型。minimind源码解读、MOE架构
人工智能·python·nlp
宸汐Fish_Heart7 小时前
Python打卡训练营Day22
开发语言·python
伊织code7 小时前
PyTorch API 9 - masked, nested, 稀疏, 存储
pytorch·python·ai·api·-·9·masked
wxl7812277 小时前
基于flask+pandas+csv的报表实现
python·flask·pandas
鸡鸭扣8 小时前
DRF/Django+Vue项目线上部署:腾讯云+Centos7.6(github的SSH认证)
前端·vue.js·python·django·腾讯云·drf