我有一个包含 tweetID、tweet-text、RegExp1、RegExp2、RegExp3、RegExp4 和 4 个正则表达式列表的数据集。我想在 tweet-text 列上一一应用正则表达式,如果 tweet-text 满足正则表达式,那么我想在相应的 RegExp 列中将值设置为 1,如果不满足则将其设置为 0 .
例如,假设tweet-text满足正则表达式编号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 | | | |
代码:
`regexes = [
re.compile('i asked .* said'),
re.compile('you asked me what .*'),
re.compile('(to get|to see|to look|is it true|is it possible) .*'),
re.compile('I .* wonder .*')
]
for regex, i in zip(regexes, range(4)):
columnName = "RegExp"+str(i+1)
for row in df['tweet-text']:
if(regex.search(row) != None):
df[columnName] = 1
else:
df[columnName] = 0`
(使用熊猫将是首选)谢谢
您可以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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句