在我的数据框架中,我有一个名为“teams”的列。它包括城市和球队名称。我想把这个城市压缩成另一个纵队。以下是数据帧: DataFrame sample
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
我可以使用正则表达式轻松提取列:
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个字符串的场景,您可以使用
见regex demo
详细信息
^
-字符串的开头(\S+(?:\s+\S+(?=\s+\S+))?)
-捕获组1:\S+
-一个或多个非空白字符(?:\s+\S+(?=\s+\S+))?
-一个可选的\s+
-1+空格\S+
-1+非空白(?=\s+\S+)
-紧接着是1+空格和1+非空格李>以下是一些其他正则表达式选项:
^(\S+(?:\s+\S+)*)\s+\S+$
(demo)/^(.*\S)\s+\S+$
(demo)/^(.*?)\s+\S+$
(demo)^(\S+(?=\s+\S+$)|\S+\s+\S+(?=\s+\S+$))
(demo)不要为此与正则表达式抗争,除非您发现它非常可读。相反,从字符串
team_name
开始。。。拆分、切片和联接:一行:
你能很容易地把它插入你的DF广播吗
相关问题 更多 >
编程相关推荐