代码之家  ›  专栏  ›  技术社区  ›  jovicbg

使用正则表达式从列中提取子字符串

  •  2
  • jovicbg  · 技术社区  · 6 年前

    我有一些列的值如下:

    Col1
    
    1/1/100 'BA1
    1/1/102Packe
    1/1/102 'to_
    

    只需提取1/1/100(从第一行开始),依此类推(1/1/102…)

    df['col1'] = df['col1'].str.extract('(\d+)/(\d+)/(\d+)', expand=True)
    

    但我只得到1分。

    不知道为什么这不起作用,是正则表达式有问题还是我需要某种映射?

    3 回复  |  直到 6 年前
        1
  •  4
  •   Wiktor Stribiżew    6 年前

    您只需要使用一个捕获组:

    df['col1'] = df['col1'].str.extract('(\d+/\d+/\d+)', expand=True)
                                         ^           ^
    

    这个 str.extract 方法返回第一个捕获组捕获的值,并且正则表达式捕获第一个值 1 加入那一组。

    测试:

    >>> import pandas as pd
    >>> df = pd.DataFrame({"col1":["1/1/100 'BA1", "1/1/102Packe", "1/1/102 'to_"]})
    >>> df['col1'].str.extract('(\d+/\d+/\d+)', expand=True)
             0
    0  1/1/100
    1  1/1/102
    2  1/1/102
    
        2
  •  0
  •   Mohamed Thasin ah    6 年前

    df['Col1']=df['Col1'].str.replace('\d+|/','')
    

    注: 正则表达式比 .str.replace .

        3
  •  0
  •   Samir    6 年前

    df['col1'].str.extract('\b(\d/?)+', expand=True)