如果单元格有2个单词,则仅提取第一个单词,如果单元格有3个单词,则提取2个第一个单词-PANDAS / REGEX

埃德加拉斯(EdgarasKryževičius)

在我的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

我可以使用正则表达式轻松提取列:

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+))?)

请参阅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+$demo)/ ^(.*\S)\s+\S+$demo)/ ^(.*?)\s+\S+$demo
  • 获取两个单词的字符串中的第一个单词和三个单词的字符串中的两个第一个单词,其他字符串中不匹配^(\S+(?=\s+\S+$)|\S+\s+\S+(?=\s+\S+$))demo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档