Wen*_*eng 4 python regex merge join pandas
我想知道是否有一种快速的方法可以通过 python 中的正则表达式合并两个 Pandas 表。
例如:表A
col1 col2
1 apple_3dollars_5
2 apple_2dollar_4
1 orange_5dollar_3
1 apple_1dollar_3
Run Code Online (Sandbox Code Playgroud)
表B
col1 col2
good (apple|oragne)_\dollars_5
bad .*_1dollar_.*
ok oragne_\ddollar_\d
Run Code Online (Sandbox Code Playgroud)
输出:
col1 col2 col3
1 apple_3dollars_5 good
1 orange_5dollar_3 ok
1 apple_1dollar_3 bad
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,我想要的不是通过一个完全匹配的 col 合并,我想通过一些正则表达式加入。谢谢!
首先修复 DataFrame 中的BRegEx:
In [222]: B
Out[222]:
col1 col2
0 good (apple|oragne)_\ddollars_5
1 bad .*_1dollar_.*
2 ok orange_\ddollar_\d
Run Code Online (Sandbox Code Playgroud)
现在我们可以准备以下变量:
In [223]: to_repl = B.col2.values.tolist()
In [224]: vals = B.col1.values.tolist()
In [225]: to_repl
Out[225]: ['(apple|oragne)_\\ddollars_5', '.*_1dollar_.*', 'orange_\\ddollar_\\d']
In [226]: vals
Out[226]: ['good', 'bad', 'ok']
Run Code Online (Sandbox Code Playgroud)
最后我们可以在替换函数中使用它们:
In [227]: A['col3'] = A['col2'].replace(to_repl, vals, regex=True)
In [228]: A
Out[228]:
col1 col2 col3
0 1 apple_3dollars_5 good
1 2 apple_2dollar_4 apple_2dollar_4
2 1 orange_5dollar_3 ok
3 1 apple_1dollar_3 bad
Run Code Online (Sandbox Code Playgroud)