使用 NumPy 和 Pandas 从包含特定字符串的列中提取数据

花韻仙語
发布: 2025-08-16 18:34:01
原创
833人浏览过

使用 numpy 和 pandas 从包含特定字符串的列中提取数据

本文介绍如何使用 NumPy 的 np.where 函数和 Pandas 的字符串处理方法,从包含特定字符串的 DataFrame 列中提取数据,并将提取的数据分配到相应的列。重点在于结合 str.contains 和 str.extract 方法,以及正确构造正则表达式,以应对字段内容不一致的情况。

提取数据并分配到新列

假设你有一个 Pandas DataFrame,其中一列(例如 "Notes")包含描述性文本,并且你希望根据文本中出现的特定关键词提取相关数值,并将这些数值分配到 DataFrame 的新列中。例如,"Notes" 列可能包含诸如 "Hit woodwork: 1" 或 "Big chances missed: 2" 之类的字符串,而你希望提取 "woodwork" 和 "Big chances missed" 对应的数值。

以下是如何使用 np.where 和正则表达式来实现此目的:

序列猴子开放平台
序列猴子开放平台

具有长序列、多模态、单模型、大数据等特点的超大规模语言模型

序列猴子开放平台 0
查看详情 序列猴子开放平台
import pandas as pd
import numpy as np

# 示例 DataFrame
data = {'Pl_Name': ['Leny Yoro', 'Tiago Santos', 'Adam Ounas', 'Alexsandro Ribeiro', 'Nabil Bentaleb', 'Edon Zhegrova', 'Ismaily', 'Rémy Cabella', 'Benjamin André', 'Angel Gomes', 'Ivan Cavaleiro', 'Lucas Chevalier', 'Samuel Umtiti', 'Jonathan David'],
        'Notes': ['-', '-', 'Hit woodwork: 1', '-', '-', 'Big chances missed: 1', '-', 'Hit woodwork: 1Big chances missed: 1', '-', '-', '-', '-', '-', 'Big chances missed: 2'],
        'Woodwork': [''] * 14,
        'Msd Pen': [''] * 14,
        'Big_Chances': [''] * 14,
        'Created': [''] * 14}
df = pd.DataFrame(data)

# 提取 "Woodwork" 的数值
df["Woodwork"] = np.where(df['Notes'].str.contains('Hit woodwork', regex=False), df['Notes'].str.extract(r'(?<=Hit woodwork: )(\d+)', expand=False), '')

# 提取 "Big chances missed" 的数值
df["Big_Chances"] = np.where(df['Notes'].str.contains('Big chances missed', regex=False), df['Notes'].str.extract(r'(?<=Big chances missed: )(\d+)', expand=False), '')

print(df)
登录后复制

代码解释:

  1. 导入必要的库: 导入 pandas 用于数据处理和 numpy 用于条件判断。
  2. np.where 函数: np.where(condition, x, y) 是一个 NumPy 函数,它根据 condition 返回 x 或 y。如果 condition 为真,则返回 x,否则返回 y。
  3. df['Notes'].str.contains('Hit woodwork', regex=False): 使用 Pandas 的字符串方法 str.contains 检查 'Notes' 列中的每个字符串是否包含 "Hit woodwork"。 regex=False 参数表示将 "Hit woodwork" 视为普通字符串,而不是正则表达式。这可以避免正则表达式的特殊字符带来的问题,并提高效率。
  4. df['Notes'].str.extract(r'(?<=Hit woodwork: )(\d+)', expand=False): 使用 Pandas 的字符串方法 str.extract 从 'Notes' 列中提取匹配正则表达式的子字符串。
    • r'(?<=Hit woodwork: )(\d+)' 是一个正则表达式,用于匹配 "Hit woodwork: " 之后的一个或多个数字。
      • (?<=Hit woodwork: ) 是一个正向后视断言,它确保匹配的字符串前面是 "Hit woodwork: ",但不包含在匹配结果中。
      • (\d+) 匹配一个或多个数字,并将其捕获到一个组中。+ 确保提取所有连续的数字,而不仅仅是第一个。
    • expand=False 参数确保返回一个 Series,而不是一个 DataFrame。
  5. 赋值给新列: 提取到的数值被赋值给 DataFrame 中名为 "Woodwork" 和 "Big_Chances" 的新列。

正则表达式的注意事项

  • (?<=...) (正向后视断言): 这个结构允许你匹配前面有特定字符串的文本,但不将该字符串包含在匹配结果中。例如,(?<=abc)def 将匹配 "abcdef" 中的 "def",但不包括 "abc"。
  • (\d+) (匹配一个或多个数字): \d 匹配任何数字 (0-9)。 + 确保匹配一个或多个连续的数字。 重要的是使用 +,这样如果数值包含多个数字,它们都会被提取出来。
  • regex=False: 如果搜索的字符串不包含正则表达式的特殊字符,并且你希望提高性能,则可以使用 regex=False。

总结

通过结合 np.where、str.contains 和 str.extract,你可以有效地从 Pandas DataFrame 的文本列中提取信息,并将其组织到新的列中。 正确构造正则表达式是关键,需要考虑到目标字符串的上下文和可能的变化。 此外,使用 regex=False 在适当的情况下可以提高代码的效率。

以上就是使用 NumPy 和 Pandas 从包含特定字符串的列中提取数据的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号