python 使用正则表达式创建新列

IC1*_*456 2 python regex python-3.x pandas

我正在尝试从 Python 数据框中的现有列创建一个新列。

下表显示的是示例数据,希望通过从列 Col2 中提取特定文本来添加新列。

下面是我正在使用的正则表达式,它循环遍历行来计算新的列值。我正在寻找甚至可以处理 Col2 中的空单元格的正则表达式。

“[AZ]*[AZ]。{9}”

谁能告诉我更好的方法吗?

在此输入图像描述

Wik*_*żew 6

您可以使用

import pandas as pd
cols = {'Col1':['Abc', 'def'],
    'Col2': ['abc.02.06.05 (Control NA', 'Test acc.02.06.05 Unknown'],
}
df = pd.DataFrame(cols)
df['NewCol'] = df['Col2'].str.extract(r'(\w+(?:\.\d+)+)', expand=False)
Run Code Online (Sandbox Code Playgroud)

输出:

  Col1                       Col2        NewCol
0  Abc  abc.02.06.05 (Control NA   abc.02.06.05
1  def  Test acc.02.06.05 Unknown  acc.02.06.05
Run Code Online (Sandbox Code Playgroud)

正则表达式(\w+(?:\.\d+)+)匹配 1+ 个单词字符,然后匹配一个或多个 a 序列.以及一个或多个数字。

创建(...)一个捕获组,当您需要使用 提取子字符串(第一次出现)时,这是必需的str.extract

如果您需要更精确的正则表达式,则需要提出实际要求。例如,您可能只想提取空白边界之间的子字符串,并且仅当字母数字字符串后面存在三组点分隔的两位数字时:

r'(?<!\S)(\w+(?:\.\d{2}){3})(?!\S)'
Run Code Online (Sandbox Code Playgroud)

请参阅此正则表达式演示