[英]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.