Python中的Pandas Series.str.extract()

2025年1月5日 | 阅读 3 分钟

引言

数据处理是数据分析的基本方面,而 Python 的 Pandas 库是处理此目的的强大工具。Pandas 中一个特别有用的功能是 str.extract() 方法,它允许您使用正则表达式从字符串 Series 中提取子字符串。在本文中,我们将探讨如何使用 str.extract() 从文本数据中提取有价值的信息,并通过示例展示其功能。

理解 str.extract() 方法

str.extract() 方法是 Pandas Series 访问器 str 的一部分,它为 Series 对象提供了向量化的字符串函数。str.extract() 方法以正则表达式模式作为参数,并返回一个新 Series,其中包含原始 Series 中每个元素的模式的第一个匹配项。如果找不到匹配项,则结果为 NaN。

语法

参数

  • pat:要搜索的正则表达式模式。
  • flags:要传递给 re 模块的标志。
  • expand:如果为 True,则返回每捕获组一个列的 DataFrame。

现在让我们探讨 str.extract() 方法的一些常见用例。

提取电话号码

str.extract() 的一个常见用例是从字符串 Series 中提取电话号码。假设我们有一个包含可能包含各种格式电话号码的字符串的 Series。我们可以使用正则表达式来提取电话号码

输出

0    123-456-7890
1    (987) 654-3210
2    555.123.4567
Name: text, dtype: object

在此示例中,正则表达式 r'(\d{3}[-.\s]??\d{3}[-.\s]??\d{4})' 匹配 xxx-xxx-xxxx、xxx.xxx.xxxx 或 xxx xxx xxxx 格式的电话号码。

提取电子邮件地址

另一项常见任务是从文本中提取电子邮件地址。我们可以使用正则表达式来标识和提取字符串 Series 中的电子邮件地址

输出

0    None
1    None
2    None
Name: text, dtype: object

在此示例中,正则表达式 r'([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})' 匹配 username@domain.com 格式的电子邮件地址。

提取日期

我们还可以使用 str.extract() 从文本中提取日期。假设我们有一个包含可能包含各种格式日期的字符串的 Series。我们可以使用正则表达式来提取日期

输出

0    2023-01-01
1    12/15/2022
2    1st Jan, 2024
Name: text, dtype: object

在此示例中,正则表达式匹配 yyyy-mm-dd、mm/dd/yyyy 或 d{1,2}(st|nd|rd|th) month, yyyy 格式的日期。

处理缺失数据

如果正则表达式与字符串的任何部分都不匹配,str.extract() 将返回 NaN。我们可以使用 fillna() 方法来处理缺失值

输出

0    2023-01-01
1    12/15/2022
2    1st Jan, 2024
Name: text, dtype: object

这会将 NaN 值替换为指定的字符串(在本例中为“未找到日期”)。

好处

  1. 灵活的模式匹配:正则表达式提供了一种定义文本中子字符串匹配模式的灵活方法,从而能够满足复杂多样的提取要求。
  2. 高效的数据提取:将 str.extract() 与正则表达式结合使用,可以高效地从大量文本数据中提取特定信息,与手动提取方法相比,可以节省时间和精力。
  3. 自动化:正则表达式可用于自动化重复模式的提取过程,减少手动干预的需求并提高工作流程效率。
  4. 数据标准化:通过使用正则表达式提取和处理数据,可以标准化提取信息的格式,从而提高数据的一致性和质量。

结论

Pandas 中的 str.extract() 方法提供了一种使用正则表达式从字符串中提取信息的强大方法。它在从非结构化文本中提取结构化数据(如电话号码、电子邮件地址和日期)时特别有用。通过掌握此方法,您可以增强数据处理能力,并从文本数据中提取有价值的见解。

在本文中,我们介绍了 str.extract() 的基本用法,并探讨了几个实际示例。但是,正则表达式可能很复杂,掌握它们需要实践。我鼓励您尝试不同的模式,并探索 str.extract() 提供的全部功能。