数据帧根据单元格中匹配的字符串获取行

2024-04-16 16:54:23 发布

您现在位置:Python中文网/ 问答频道 /正文

给定以下数据帧

+-----+----------------+--------+---------+
|     |       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 |
+-----+----------------+--------+---------+

我没办法解决这个问题。非常感谢您的帮助。你知道吗


Tags: 数据recomyouhelloworldhhhi
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)将检查给定行中的任何列是否为真。因此msk是一列真/假值,指示是否在该行中找到了正则表达式。你知道吗

使用stack避免apply

df.loc[df.stack().str.match(r'[Hh](i|ello)').unstack().any(1)]

enter image description here

使用match生成未来警告。这个警告和我们正在做的是一致的,所以这很好。然而,findall完成了同样的事情

df.loc[df.stack().str.findall(r'[Hh](i|ello)').unstack().any(1)]

相关问题 更多 >