给出以下数据框
+-----+----------------+--------+---------+
| | A | B | C |
+-----+----------------+--------+---------+
| 0 | hello@me.com | 2.0 | Hello |
| 1 | you@you.com | 3.0 | World |
| 2 | us@world.com | hi | holiday |
+-----+----------------+--------+---------+
如何获取re.compile([Hh](i|ello))
在单元格中匹配的所有行?也就是说,从上面的例子中,我想获得以下输出:
+-----+----------------+--------+---------+
| | A | B | C |
+-----+----------------+--------+---------+
| 0 | hello@me.com | 2.0 | Hello |
| 2 | us@world.com | hi | holiday |
+-----+----------------+--------+---------+
我无法为此获得解决方案。非常感谢帮助。
答案 0 :(得分:3)
使用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)]
答案 1 :(得分:2)
您可以使用带有正则表达式的findall函数。
msk = df.apply(lambda x: x.str.findall(r'[Hh](i|ello)')).any(axis=1)
df[msk]
+---|------------|------|---------+
| | A | B | C |
+---|------------|------|---------+
| 0 |hello@me.com| 2 | Hello |
| 2 |us@world.com| hi | holiday |
+---|------------|------|---------+
any(axis=1)
将检查给定行中的任何列是否为true。所以msk
是一列True / False值,表示是否在该行中找到了正则表达式。