【问题标题】:Extract a part of a string using Regex in Python Pandas [duplicate]在 Python Pandas 中使用正则表达式提取字符串的一部分 [重复]
【发布时间】:2021-05-21 12:26:15
【问题描述】:

我是一名从事数据​​科学项目的学生,我需要从我的数据框的一列中提取一部分。 数据框如下所示: column.

我想从“HOTHOTVIDEOHOT0501005107FilmVidéoClub”之类的字符串中提取部分 HOTHOTVIDEO

所以我使用这样的正则表达式编写了这条指令: facturation['annotation']=facturation['annotation'].str.findall('([A-Z0-9]{3}\d+)').apply(''.join)

它提取所有正确的东西,除了有时我有这样的字符串:“CTVCANALVODCTV0200052670CTV0200052670”,它返回CTV0200052670CTV0200052670,但只想要第一次出现:Like this

有人可以帮我解决这个问题吗:)

【问题讨论】:

  • 这无关,不过,@okpython。该问题的原因是正则表达式模式本身。这样做的原因是在该模式上所做的工作。
  • 那你为什么用findall呢?使用extract.str.extract(r'([A-Z0-9]{3}\d+)')
  • 我已经尝试过使用extract,它解决了这个问题,但它导致了另一个问题。也就是说,它只能从 MFEMETROPOLITANMFE05UH622455AlaskaHD 等字符串中提取 MFE05。这就是我使用findall 的原因,因为它会返回所有匹配项。 :(
  • str.extract(r'([A-Z]{1,3}\d{3,})') 怎么样?还是str.extract(r'([A-Z]{2,3}\d{3,})')

标签: python regex pandas data-science extract


【解决方案1】:

我认为问题出在您的 apply + joinfindall 方法中,因为您在数据中匹配了 2 次此模式,然后您又加入了它。 findall 为您返回列表。从列表中,您只需要第一项,而不是全部。

【讨论】:

    【解决方案2】:

    感谢所有帮助过我的人:)我找到了答案:

    facturation['annotation'] = facturation['annotation'].str.findall('([A-Z0-9]{3}\d+)').apply(''.join)

    facturation['annotation'] = facturation['annotation'].str.extract('(.{0,13})')

    【讨论】:

      猜你喜欢
      • 2015-12-31
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多