繁体   English   中英

从列中提取 substring 并替换列数据框

[英]Extract a substring from a column and replace column data frame

我需要一些帮助,从我的数据框中的列中提取 substring,然后用 substring 替换该列。 我想知道 python 是否会更好地剥离字符串或使用正则表达式用 substring 替换/替换字符串。

该字符串在列中看起来像这样:

Person
------
<Person 1234567 Tom Brady>
<Person 456789012 Mary Ann Thomas>
<Person 92145 John Smith>

我想要的是这样的:

Person
------
Tom Brady
Mary Ann Thomas
John Smith

到目前为止,我所拥有的正则表达式 go 是这样的:

/^([^.]+[.]+[^.]+)[.]/g

这只是得到这部分'<Person 1234567',不知道如何从最后得到'>'。

Python 正则表达式有一个称为search的 function,它在字符串中找到匹配的模式。 通过给出的示例,您可以使用正则表达式来提取名称:

import re
s = "<Person 1234567 John Smith>"
re.search("[A-Z][a-z]+(\s[A-Z][a-z]+)+", s).group(0)
>>> 'John Smith'

正则表达式[AZ][az]+(\s[AZ][az]+)+只是匹配名称(Tom Brady、Mary Ann Thomas 等)

我喜欢使用 Panda 的apply function 对每一行应用一个操作,所以最终结果如下所示:

import re
import pandas as pd

def extract_name(row):
    row["Person"] = re.search("[A-Z][a-z]+(\s[A-Z][a-z]+)+", row["Person"]).group(0)
    return row

df = YOUR DATAFRAME
df2 = df.apply(extract_name, axis=1)

并且df2具有提取名称的 Person 列。

您可以首先使用此代码识别所有字母以保持简单

res =  re.findall(r"[^()0-9-]+", string)
res[1]

这应该会返回一个字符串列表['Person', 'Tom Brady'] ,然后您可以使用res[1]访问 Person 的名称

**备注:我还没有尝试过代码,如果它也返回空格,你应该可以使用strip()轻松删除它们,或者它应该是列表res[3]的第三个字符串。

您可以在线或通过文档阅读有关re.findall()的更多信息。

多种方式,但您可以使用str.replace()

import pandas as pd

df = pd.DataFrame({'Person': ['<Person 1234567 Tom Brady>',
                              '<Person 456789012 Mary Ann Thomas>',
                              '<Person 92145 John Smith>']})
df['Person'] = df['Person'].str.replace(r'(?:<Person[\d\s]+|>)', '', regex=True)

print(df)

印刷:

            Person
0        Tom Brady
1  Mary Ann Thomas
2       John Smith

使用的模式: (?:<Person[\d\s]+|>) ,请参阅在线演示

  • (?: - 打开非捕获组进行交替;
    • <Person[\d\s]+ - 匹配文字 '<Person' 后跟 1+ 个空格字符或数字;
    • | - 或者;
    • > - 文字 '>'
    • ) - 关闭组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM