在我的DataFrame中,我有一个名为"teams"的列。它包括城市和球队名称。我想把这个城市摘录到另一个专栏里。以下是数据帧:DataFrame样本
nba_df['team'].head(11)
team
0 Toronto Raptors
1 Boston Celtics
2 Philadelphia 76ers
3 Cleveland Cavaliers
4 Indiana Pacers
5 Miami Heat
6 Milwaukee Bucks
7 Washington Wizards
8 Detroit Pistons
9 Charlotte Hornets
10 New York Knicks
我可以使用regex:轻松地提取列
nba_df['cities'] = nba_df.team.str.extract('(^[w*]+)', expand=True)
nba_df[['team', 'cities']].head(11)
team cities
0 Toronto Raptors Toronto
1 Boston Celtics Boston
2 Philadelphia 76ers Philadelphia
3 Cleveland Cavaliers Cleveland
4 Indiana Pacers Indiana
5 Miami Heat Miami
6 Milwaukee Bucks Milwaukee
7 Washington Wizards Washington
8 Detroit Pistons Detroit
9 Charlotte Hornets Charlotte
10 New York Knicks New
然而,在"名字"一栏中,对于纽约尼克斯队来说,它只给了我一个值:;新的";我想得到";纽约":
结果
那么,我应该怎么做,如果单元格有2个单词,我如何从开头只提取一个单词;如果单元格有3个单词,如何使用正则表达式从中提取2个单词?
对于只有2或3个字符串的场景,可以使用
^(S+(?:s+S+(?=s+S+))?)
请参阅regex演示。
详细信息
^
-字符串的开头(S+(?:s+S+(?=s+S+))?)
-捕获组1:S+
-一个或多个非空白字符(?:s+S+(?=s+S+))?
-的可选序列s+
-1+空白S+
-1+非空白(?=s+S+)
-紧接着是1+空白和1+非空白
以下是一些其他正则表达式选项:
- 除最后一个单词外的所有单词:
^(S+(?:s+S+)*)s+S+$
(演示(/^(.*S)s+S+$
(演示(/^(.*?)s+S+$
(演示( - 获取两个单词串中的第一个单词和三个单词串的两个第一个单词,并且在其他字符串中不匹配:
^(S+(?=s+S+$)|S+s+S+(?=s+S+$))
(演示(
不要为此使用regex,除非您发现它非常可读。相反,从字符串team_name
开始。。。拆分、切片和连接:
team_words = team_name.split()
team_city = team_words[:-1]
city = ' '.join(team_city)
一行:
city = ' '.join(team_name.split()[:-1])
你能很容易地把它插入你的测向广播吗?