Pandas迭代行模式识别

2024-09-29 18:57:58 发布

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

我想在panda表中应用模式识别,如果作者姓名与特定模式匹配,则将其代码设置为有效。但是,我只得到不正确的值。我迭代每一行,但是我只想在对应单元格的值为0时应用lambda函数。你知道吗

Author     valid
Andi       0
Tomasius   0
Anke       0

这是我的密码:

df["valid"] =0
def author_check(x, y):     
    if str(x) == y:            
        return 1       
    else: 
        return 0 
import re
author_list =["Andi","Tomasius"]#]
regex_list = [".*nd*"]
for i in range(len(author_list)):
    for x in range(len(regex_list)):
        r = re.compile(regex_list[x])
        newlist = filter(r.match, author_list)
        x = len(list(newlist))        
        if x>0:                 
            df['brand'] = df.apply(lambda row: author_check(row['Author'], author_list[i]), axis=1 )

一旦我运行这个,我就会

Author     valid
Andi       0
Tomasius   1
Anke       0

但我想

Author     valid
Andi       1
Tomasius   0
Anke       0

我做错了什么?任何暗示都将不胜感激!你知道吗

干杯, 安迪


Tags: lambdaredflenreturnifchecklist
1条回答
网友
1楼 · 发布于 2024-09-29 18:57:58

你有一些问题。首先,您的正则表达式将同时匹配AndiAnke,因为.*nd*本质上是说“匹配0个或多个非换行符、一个n字符和0个或多个d字符”。其次,使用循环并没有利用Panda的功能。相反,我建议使用^{}^{}以更快更简洁的方式执行函数。你知道吗

使用dataframe的示例:

df = pd.DataFrame({'Author': ['Andi', 'Tomasius', 'Anke'], 'valid': [0, 0, 0]})

以下代码将为您提供所需的内容:

df['valid'] = np.where(df.Author.str.contains('nd'), 1, 0)

如果您的查询更复杂,并且需要正则表达式(根据您的注释),您也可以使用它:

p = re.compile(r'(?:as)|(?:nd)')
df['valid'] = np.where(df.Author.str.contains(p), 1, 0)

相关问题 更多 >

    热门问题