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

python使用正则表达式创建新列,python,regex,python-3.x,pandas,Python,Regex,Python 3.x,Pandas,我正试图从Python dataframe中的现有列创建一个新列 下表显示的是示例数据,希望通过从Col2列提取特定文本来添加新列 下面是我正在使用的正则表达式,它通过行循环来计算新的列值。我正在寻找正则表达式,它甚至可以处理Col2中的空单元格 “[A-Z]*[A-Z].{9}” 有谁能告诉我更好的方法吗 您可以使用 import pandas as pd cols = {'Col1':['Abc', 'def'], 'Col2': ['abc.02.06.05 (Control NA

我正试图从Python dataframe中的现有列创建一个新列

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

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

“[A-Z]*[A-Z].{9}”

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

您可以使用

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)
输出:

  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
(\w+(?:\。\d+)
正则表达式匹配1+个字字符,然后匹配一个或多个
序列和一个或多个数字

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

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

r'(?<!\S)(\w+(?:\.\d{2}){3})(?!\S)'

r'(?不要发布图像,用文本提供数据可能
df['NewCol']=df['Col2'].str.extract(r'(\w+(?:\.\d+),expand=False)
?谢谢你的Wiktor Stribiżew。这个正则表达式(\w+(?:\.\d+)是我一直在寻找的。我能够使用([A-Z][A-Z0-9][A-Z].\d\d\d\d\d)提取文本,但我认为你的方法更好。