【问题标题】:String extraction in Python / Pandas with repeated delimiter在 Python / Pandas 中使用重复分隔符提取字符串
【发布时间】:2016-12-01 16:44:39
【问题描述】:

我有一个数据框,其中的一列包含一个或多个变量的任意组合,用“/”分隔符分隔,例如:

Rd/MLERS
Rd
Rd          
Rd/DLEPC/DLERS
SLERS
MLERS

等等,等等。我想提取主分类器,即:紧接在第一个“/”字符之前的唯一或第一个变量。我对 str.extract 和我的努力没有太多经验 -

df["primaryEjecta1"] = df["MORPHOLOGY_EJECTA_1"].str.extract('(.*)/', expand=True)

没有按预期工作 -

Rd
NaN
NaN
Rd/DLEPC
NaN
NaN

具体来说——

  • 在只有一个变量的情况下,我无意中将其转换为 NaN;
  • 如果有三个(或更多)变量,我将提取前两个(或更多),而不仅仅是第一个。

如果您知道如何解决这个问题,当然可以轻松解决 - 但是我能够在网上找到的大多数示例和教程都假定没有重复的漂亮、整洁的分隔符 - 所以感谢你们提供的任何帮助。

【问题讨论】:

    标签: python regex python-3.x pandas


    【解决方案1】:

    使用str.splitstr[0] 访问第一个拆分,即使没有分隔符,它仍然会返回初始字符串:

    In [121]:
    df["primaryEjecta1"] = df['text'].str.split('/').str[0]
    df
    
    Out[121]:
                 text primaryEjecta1
    0        Rd/MLERS             Rd
    1              Rd             Rd
    2              Rd             Rd
    3  Rd/DLEPC/DLERS             Rd
    4           SLERS          SLERS
    5           MLERS          MLERS
    

    【讨论】:

    • 也可以指定maxsplit,因为他只需要第一部分:split('/', 1)
    【解决方案2】:

    你可以使用强大的extract()方法:

    In [31]: df
    Out[31]:
                  txt
    0        Rd/MLERS
    1              Rd
    2              Rd
    3  Rd/DLEPC/DLERS
    4           SLERS
    5           MLERS
    
    In [32]: df['clsfr'] = df['txt'].str.extract(r'([^\/]+)', expand=True)
    
    In [33]: df
    Out[33]:
                  txt  clsfr
    0        Rd/MLERS     Rd
    1              Rd     Rd
    2              Rd     Rd
    3  Rd/DLEPC/DLERS     Rd
    4           SLERS  SLERS
    5           MLERS  MLERS
    

    解释:

    RegEx ([^\/]+) - 表示将除/ 之外的任何内容(直到第一次出现/)放入第一组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-27
      • 2021-03-18
      • 2021-08-11
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多