【问题标题】:Regex in pandas to find a match based on string in another column大熊猫中的正则表达式根据另一列中的字符串查找匹配项
【发布时间】:2016-03-08 11:20:35
【问题描述】:

我有一个数据框,这是其中的一部分。

   CodeID    Codes
0  'code1'   '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'   ...
1  'code2'   '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'   ...
2  'code3'   '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'   ...
...

我要做的是提取列Codes中与模式r"\[<code in CodeID column>[^][]*\]"匹配的字符串部分

类似:

df['Code'] = df['Codes'].str.find(r"\[<code in CodeID column>[^][]*\]")

This recent question 似乎暗示以矢量化的方式不可能,但情况并不完全相同。

【问题讨论】:

  • 如果可能的话,正则表达式看起来像r"\[&lt;code in CodeID column&gt;[^][]*\]"
  • 谢谢。我总是对正则表达式视而不见,把调试的那部分留到最后!

标签: regex pandas dataframe


【解决方案1】:

我们当然可以使用一列中的字符串来比较另一列,如下所示,

在 lambda 表达式中,x[0] 是 codeID,x[1] 是代码。

import re
import pandas as pd

Out[20]: 
    CodeID                                         Codes
0  'code1'  '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'
1  'code2'  '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'
2  'code3'  '[code1(a,b,c)][code2(c,d,e)][code3(e,f,g)]'

df[['CodeID','Codes']].apply(lambda x: re.match(r"\[%s[^][]*\]"%x[0], x[1]),axis=1)
Out[21]: 
0    None
1    None
2    None
dtype: object

由于我的正则表达式技能不好,它返回 None :)

【讨论】:

    猜你喜欢
    • 2020-09-01
    • 2019-12-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多