Python 在表中的特定列上应用正则表达式
我有一个包含tweetID、tweet text、RegExp1、RegExp2、RegExp3、RegExp4列的数据集,以及一个包含4个正则表达式的列表。 我想在tweet文本列上逐个应用正则表达式,如果tweet文本满足正则表达式,那么我想在相应的RegExp列中将值设置为1,如果它不满足,那么我想将其设置为0 例如,假设tweet文本满足正则表达式1,那么我想将相应的RegExp1列的值设置为1,不满足正则表达式2,那么我想将相应的RegExp2列的值设置为0,依此类推。我尝试了最后给出的代码,但它对我不起作用 我的数据集看起来像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 | 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