当前位置: 首页 > 知识库问答 >
问题:

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

穆招
2023-03-14

在我的数据框架中,有一列名为“teams”。它包括城市和球队名称。我想把这个城市拉进另一个纵队。这是数据帧:数据帧示例

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个答案

太叔弘壮
2023-03-14

不要为此与正则表达式作斗争,除非您发现它非常易读。相反,从字符串team_name开始...拆分、切片和连接:

team_words = team_name.split()
team_city = team_words[:-1]
city = ' '.join(team_city)

在一行中:

city = ' '.join(team_name.split()[:-1])

你能很容易地把它插入你的DF广播吗?

池兴邦
2023-03-14

对于您只有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个非空格。

      以下是一些其他正则表达式选项:

      • 除最后一个外的所有单词:^(\S(?:\S)*)\S\S$(演示)/^(.*\S)\S\S$(演示)/^(.*)\s\s$(演示)

 类似资料:
  • 问题内容: 我有大量的实际文本,需要将单词拉出来以输入到拼写检查器中。我想尽可能多 地 提取 有意义的 单词,而不会产生太大干扰。我知道这附近有很多正则表达式忍者,所以希望有人可以帮助我。 目前,我正在使用提取所有字母序列。这是一个很好的近似值,但是它却拖走了很多垃圾。 理想情况下, 我想要一些正则表达式(不一定漂亮或高效),该正则表达式提取由自然词分隔符(例如,等等)定界的所有字母序列,并忽略任

  • 问题内容: 如何提取Linux(csh)中特定单词之后的单词?更确切地说,我有一个文件,其中只有一行看起来像这样: 我想提取单词 后面的数字。我不能使用sed,因为仅当您要提取整行时才可以使用sed。也许我可以使用awk? 另外,我有多个具有不同值的文件,所以我需要一些提取值但不依赖于值的文件。 问题答案: 与: 基本上循环遍历该行的每个单词。当您找到要查找的第一个单词时,抓住下一个单词并打印出来

  • 当从trie中删除一个单词时,如果该单词的节点没有被用于另一个单词,我会尝试删除该单词的节点。 所以我不想在删除一个单词时仅仅标记一个节点。真正应该删除未使用的节点。 我在这里漏掉了什么? 我像这样从另一个类的trie实例调用函数:

  • 问题内容: 我想运行一个查询,该查询仅从特定字段返回第一个单词,该字段具有多个由空格分隔的单词,我想我可能需要执行一些正则表达式工作来完成此操作?我知道如何使用PHP中的几种方法来执行此操作,但这最好在数据库端执行。任何想法表示赞赏。谢谢。 问题答案: :http : //dev.mysql.com/doc/refman/5.0/zh- CN/string-functions.html#funct

  • 问题内容: 我有一个像这样的词,它由两个简单的词组合而成,没有空格。 我想知道哪种Lucene Analyzer可以将这种单词标记为两个单独的单词? 问题答案: 有一个看作为在Solr的说明 该过滤器使用组成词的词典将复合词拆分或分解为单个词。每个输入令牌均不变地传递。如果还可以将其分解为子字,则每个子字也将在同一逻辑位置添加到流中。 在:“ Donaudampfschiff dummkopf”中

  • 问题内容: 如何获得给定字符串的每个单词的首字母? 我找到了javascript方法,但不确定如何将其转换为php。 问题答案: 在空格上,然后使用表示法以数组形式访问结果字符串: 如果您期望多个空格可以分隔单词,请改用 或者,例如,如果非空格字符分隔单词(),请同时使用: