[英]If cell has 2 words, extract only 1st word and if cell has 3 words, extract 2 first words - PANDAS/REGEX
在我的 DataFrame 中,我有一个名为“团队”的列。 它包括城市和团队名称。 我想将城市提取到另一列中。 这是 dataframe: 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
我可以使用正则表达式轻松提取列:
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
但是,在纽约尼克斯队的“名称”列中,它只给我以下值:“New”,我想得到“New York”:
那么,我应该怎么做,如果单元格有 2 个单词,我如何从一开始只提取一个单词,如果单元格有 3 个单词,我如何使用正则表达式从中提取 2 个单词?
对于您只有 2 或 3 个单词字符串的场景,您可以使用
^(\S+(?:\s+\S+(?=\s+\S+))?)
请参阅正则表达式演示。
细节
^
- 字符串的开始(\S+(?:\s+\S+(?=\s+\S+))?)
- 捕获组 1:
\S+
- 一个或多个非空白字符(?:\s+\S+(?=\s+\S+))?
- 一个可选的序列
\s+
- 1+ 个空格\S+
- 1+ 个非空格(?=\s+\S+)
- 紧接着是 1+ 个空格和 1+ 个非空格。以下是一些其他正则表达式选项:
不要为此纠结于正则表达式,除非你觉得它非常可读。 相反,从字符串team_name
开始......拆分、切片和连接:
team_words = team_name.split()
team_city = team_words[:-1]
city = ' '.join(team_city)
在一行中:
city = ' '.join(team_name.split()[:-1])
你能很容易地将它放入你的 DF 广播中吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.