gpt4 book ai didi

python-3.x - 如何在 pandas 数据框中用 regex 分隔一个字符串和一个空格?

转载 作者:行者123 更新时间:2023-12-04 01:07:47 25 4
gpt4 key购买 nike

我有一个数据框列,teams,我试图将球队名称“CubsWhite Sox”分成两部分,“Cubs”和“White Sox”。

import pandas as pd
import re
data = [{'teams':'CubsWhite Sox','area':'Chicago','league': 'MLB'}, {'teams': 'Red Sox','area':'Boston', 'league': 'MLB'}, {'teams': 'Blue Jay','area':'Toronto', 'league': 'MLB'}]

df = pd.DataFrame(data)
df

到目前为止我只能达到这个结果。

df["team"] = df.apply(lambda x: re.findall(r"[A-Z][^A-Z]*(?:\s[A-Z][^A-Z]*)", x["teams"]), axis=1)
df
teams area league team
0 CubsWhite Sox Chicago MLB [White Sox]
1 Red Sox Boston MLB [Red Sox]
2 Blue Jay Toronto MLB [Blue Jay]

我从这里发现,在白色、红色和蓝色之后还有两个空格。

df["team"] = df.apply(lambda x: re.findall(r"[A-Z0-9][^A-Z]*", x["teams"]), axis=1)
df
teams area league team
0 CubsWhite Sox Chicago MLB [Cubs, White , Sox]
1 Red Sox Boston MLB [Red , Sox]
2 Blue Jay Toronto MLB [Blue , Jay]

我可以轻松删除它

df['teams'] = df['teams'].str.replace(r' +', '')

你能帮我像这样拆分这些团队名称吗,请使用 re.findall?

df
teams area league team
0 CubsWhite Sox Chicago MLB [Cubs, White Sox]
1 Red Sox Boston MLB [Red Sox]
2 Blue Jay Toronto MLB [Blue Jay]

谢谢!

最佳答案

你可以使用

df['team'] = df['teams'].str.findall(r'[A-Z][a-z]*(?:\s+[A-Z][a-z]*)?')

参见 regex demo . 详细信息:

  • [A-Z][a-z]* - 一个大写字母后跟任意零个或多个小写字母
  • (?:\s+[A-Z][a-z]*)? - 匹配的可选非捕获组
    • \s+ - 一个或多个空格
    • [A-Z][a-z]* - 一个大写字母后跟任意零个或多个小写字母。

Pandas 测试:

>>> df['teams'].str.findall(r'[A-Z][a-z]*(?:\s+[A-Z][a-z]*)?')
0 [Cubs, White Sox]
1 [Red Sox]
2 [Blue Jay]
Name: teams, dtype: object

关于python-3.x - 如何在 pandas 数据框中用 regex 分隔一个字符串和一个空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65835567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com