pandas中的正则表达式根据另一列中的字符串查找匹配项

时间:2015-12-03 17:51:23

标签: regex pandas dataframe

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

   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似乎暗示它不可能以矢量化方式存在,但情况并非完全相同。

1 个答案:

答案 0 :(得分: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:)