
本文介绍如何使用 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 和正则表达式来实现此目的:
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)代码解释:
通过结合 np.where、str.contains 和 str.extract,你可以有效地从 Pandas DataFrame 的文本列中提取信息,并将其组织到新的列中。 正确构造正则表达式是关键,需要考虑到目标字符串的上下文和可能的变化。 此外,使用 regex=False 在适当的情况下可以提高代码的效率。
以上就是使用 NumPy 和 Pandas 从包含特定字符串的列中提取数据的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号