筛选python中不遵循正则表达式模式的字符串

2024-10-04 15:26:45 发布

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

我想从熊猫数据帧中筛选不遵循特定模式的字符串。但我只得到一个空的数据帧

我的代码

l = ['Dubai', 'St. Petersburg', 'Aachen', '21323', '123134', 'Klaus@facebook.com']
l = pd.DataFrame(l)

pattern = re.compile("([A-Z])\w+|(\w[A-Z\u00E4-\u02AF])\w+", re.UNICODE)
df = l.filter(regex=pattern)

print(df)

输出:

Empty DataFrame
Columns: []
Index: [0, 1, 2, 3, 4, 5]

预期产出:

                0
0           Dubai
1  St. Petersburg
2          Aachen
3            None
4            None
5            None

Tags: 数据字符串代码renonedataframedffacebook
1条回答
网友
1楼 · 发布于 2024-10-04 15:26:45

df.filter()方法根据行/列的名称而不是其内容进行筛选;如文档中所述:“请注意,此例程不会对数据框的内容进行筛选。此筛选应用于索引的标签。”

要执行所需操作,您可以定义这样一个函数来进行模式匹配:

import numpy as np
import re

def like(x, pattern):
    r = re.compile(pattern)
    vlike = np.vectorize(lambda val: bool(r.fullmatch(val)))
    return vlike(x)

然后将其传递给.loc[]

df = df.loc[like(df['column_name'], pattern), :]

现在,df应该只包含列'column_name'与给定模式匹配的行

您可以在this article中看到一个示例

相关问题 更多 >

    热门问题