大熊猫数据框中获取根据排在细胞
问题描述:
匹配的字符串考虑以下数据帧大熊猫数据框中获取根据排在细胞
+-----+----------------+--------+---------+
| | A | B | C |
+-----+----------------+--------+---------+
| 0 | [email protected] | 2.0 | Hello |
| 1 | [email protected] | 3.0 | World |
| 2 | [email protected] | hi | holiday |
+-----+----------------+--------+---------+
如何,我可以得到其中re.compile([Hh](i|ello))
将匹配在单元格中的所有行?也就是说,从上面的例子中,我想得到以下输出:
+-----+----------------+--------+---------+
| | A | B | C |
+-----+----------------+--------+---------+
| 0 | [email protected] | 2.0 | Hello |
| 2 | [email protected] | hi | holiday |
+-----+----------------+--------+---------+
我无法为此获得解决方案。和帮助将非常感激。
答
您可以使用带正则表达式的findall函数。
msk = df.apply(lambda x: x.str.findall(r'[Hh](i|ello)')).any(axis=1)
df[msk]
+---|------------|------|---------+
| | A | B | C |
+---|------------|------|---------+
| 0 |[email protected]| 2 | Hello |
| 2 |[email protected]| hi | holiday |
+---|------------|------|---------+
any(axis=1)
将检查给定行中的任何列是否为真。所以msk
是True/False值的单列,指示在该行中是否找到正则表达式。
答
使用stack
避免apply
df.loc[df.stack().str.match(r'[Hh](i|ello)').unstack().any(1)]
使用match
产生未来的警告。警告与我们正在做的事情是一致的,所以这很好。然而,findall
完成相同的事情
df.loc[df.stack().str.findall(r'[Hh](i|ello)').unstack().any(1)]
+0
也谢谢你的回答! – dliv
谢谢你,这是我最终使用。 (并且道歉接受那个迟到!) – dliv