Python 在表中的特定列上应用正则表达式

Python 在表中的特定列上应用正则表达式,python,regex,python-3.x,pandas,dataframe,Python,Regex,Python 3.x,Pandas,Dataframe,我有一个包含tweetID、tweet text、RegExp1、RegExp2、RegExp3、RegExp4列的数据集,以及一个包含4个正则表达式的列表。 我想在tweet文本列上逐个应用正则表达式,如果tweet文本满足正则表达式,那么我想在相应的RegExp列中将值设置为1,如果它不满足,那么我想将其设置为0 例如,假设tweet文本满足正则表达式1,那么我想将相应的RegExp1列的值设置为1,不满足正则表达式2,那么我想将相应的RegExp2列的值设置为0,依此类推。我尝试了最后给出

我有一个包含tweetID、tweet text、RegExp1、RegExp2、RegExp3、RegExp4列的数据集,以及一个包含4个正则表达式的列表。 我想在tweet文本列上逐个应用正则表达式,如果tweet文本满足正则表达式,那么我想在相应的RegExp列中将值设置为1,如果它不满足,那么我想将其设置为0

例如,假设tweet文本满足正则表达式1,那么我想将相应的RegExp1列的值设置为1,不满足正则表达式2,那么我想将相应的RegExp2列的值设置为0,依此类推。我尝试了最后给出的代码,但它对我不起作用

我的数据集看起来像

tweetID | tweet-text         | RegExp1 | RexExp2 | RegExp3 | RexExp4
---------------------------------------------------------------------
10001   | to get it or?      |         |         |         |
10333   | I just wonder :)   |         |         |         |
10933   | is it possible dude|         |         |         |
14633   | he is good at      |         |         |         |
代码:


(最好使用熊猫)谢谢

您可以在循环中使用
str.contains
。您需要传递正则表达式模式(不是编译的正则表达式对象)

这是我的开始:

In [1062]: df.head()
Out[1062]: 
   tweetID            tweet-text    RegExp1    RegExp2    RegExp3 RegExp4
0    10001   to get it or?                                               
1    10333   I just wonder :)                                            
2    10933   is it possible dude                                         
3    14633   he is good at 

In [1063]: regexes = [
      ...:     'i asked .* said',
      ...:     'you asked me what .*',
      ...:     '(?:to get|to see|to look|is it true|is it possible) .*',
      ...:     'I .* wonder .*'
      ...: ]
接下来,为每个正则表达式模式运行一个循环。调用
str.contains
并将结果依次分配给每列:

In [1090]: for i, r in enumerate(regexes):
      ...:     df['RegExp%d' %(i + 1)] = df['tweet-text'].str.contains(r).astype(int)
      ...:     

In [1091]: df.head()
Out[1091]: 
   tweetID            tweet-text  RegExp1  RegExp2  RegExp3  RegExp4
0    10001   to get it or?              0        0        1        0
1    10333   I just wonder :)           0        0        0        1
2    10933   is it possible dude        0        0        1        0
3    14633   he is good at              0        0        0        0

那么困难到底在哪里呢?你试过为它写代码吗?我试过很多次…但都没有成功@Harshihthotaso,如果你能发布你尝试过的代码,我们可以帮你找到答案。好的,那么你的数据集在哪里?你的正则表达式是什么?在不帮助我们理解你想做什么的情况下,你如何期待任何帮助?@Irfanullah 1。细节不应该出现在评论中。2.我们还需要查看您的数据集。您的pandas框架的csv或剪贴板粘贴。谢谢。它部分起作用。现在的问题是,我必须执行搜索,忽略正则表达式中的大小写和多行,我需要传递已编译的正则表达式对象,例如,
re.compile('I.*wonder.*',re.I | re.M)
有帮助吗?@COLDSPEED@Irfanullah看看文档:有一个“flags”参数来传递regex标志。你可以用这个。
In [1090]: for i, r in enumerate(regexes):
      ...:     df['RegExp%d' %(i + 1)] = df['tweet-text'].str.contains(r).astype(int)
      ...:     

In [1091]: df.head()
Out[1091]: 
   tweetID            tweet-text  RegExp1  RegExp2  RegExp3  RegExp4
0    10001   to get it or?              0        0        1        0
1    10333   I just wonder :)           0        0        0        1
2    10933   is it possible dude        0        0        1        0
3    14633   he is good at              0        0        0        0