【问题标题】:Pandas DataFrame get substrings from columnPandas DataFrame 从列中获取子字符串
【发布时间】:2015-07-31 09:18:02
【问题描述】:

我有一个名为“KL”的列,例如:

sem_0405M4209F2057_1.000
sem_A_0103M5836F4798_1.000

现在我想提取“M”之后的四位数字和“F”之后的四位数字。但是df["KL"].str.extract 我无法让它工作。

M 和 F 的位置不同,因此仅使用切片 [9:13] 将不适用于整个列。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果你想使用str.extract,方法如下:

    >>> df['KL'].str.extract(r'M(?P<M>[0-9]{4})F(?P<F>[0-9]{4})')
          M     F
    0  4209  2057
    1  5836  4798
    

    这里,M(?P&lt;M&gt;[0-9]{4}) 匹配字符 'M',然后捕获它后面的 4 位数字([0-9]{4} 部分)。这放在M 列中(在捕获组内用?P&lt;M&gt; 指定)。 F 也是如此。

    【讨论】:

      【解决方案2】:

      您可以使用split 来实现这一点,可能存在更好的方法:

      In [147]:
      s = pd.Series(['sem_0405M4209F2057_1.000','sem_A_0103M5836F4798_1.000'])
      s
      
      Out[147]:
      0      sem_0405M4209F2057_1.000
      1    sem_A_0103M5836F4798_1.000
      dtype: object
      
      In [153]:
      m = s.str.split('M').str[1].str.split('F').str[0][:4]
      f = s.str.split('M').str[1].str.split('F').str[1].str[:4]
      print(m)
      print(f)
      
      0    4209
      1    5836
      dtype: object
      
      0    2057
      1    4798
      dtype: object
      

      【讨论】:

        【解决方案3】:

        你也可以使用正则表达式:

        import re
        
        def get_data(x):
            data = re.search( r'M(\d{4})F(\d{4})', x)
            if data:
                m = data.group(1)
                f = data.group(2)
        
                return m, f
        
        df = pd.DataFrame(data={'a': ['sem_0405M4209F2057_1.000', 'sem_0405M4239F2027_1.000']})
        
        df['data'] = df['a'].apply(lambda x: get_data(x))
        
        >>
                                  a          data
        0  sem_0405M4209F2057_1.000  (4209, 2057)
        1  sem_0405M4239F2027_1.000  (4239, 2027)
        

        【讨论】:

          猜你喜欢
          • 2020-12-23
          • 1970-01-01
          • 2018-03-16
          • 2018-04-05
          • 1970-01-01
          • 2017-10-15
          • 2012-01-12
          • 2020-06-04
          • 1970-01-01
          相关资源
          最近更新 更多