TypeError:“str”和“bool”的操作数类型不受支持

2024-06-16 07:14:59 发布

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

我有不同列的dataframeusers。我的目标是添加列[uses_name],当密码与每个用户的名字或姓氏相同时,它应该是True。在

例如,十二行中的[user_name]包含milford.hubbard。那么在[uses_name]中是True,因为[password]和[last_name]是相同的。在

为此,我使用正则表达式创建两个列[first_name]和[last_name]。当create[uses_name]时,|运算符有问题。我在pandas文档中读到了更多关于布尔索引的内容,但没有找到答案。在

我的代码:

import pandas as pd

users = pd.read_csv('datasets/users.csv')

# Extracting first and last names into their own columns

users['first_name'] = users['user_name'].str.extract(r'(^\w+)', expand=False)

users['last_name'] = users['user_name'].str.extract(r'(\w+$)', expand=False)

# Flagging the users with passwords that matches their names

users['uses_name'] = users['password'].isin(users['first_name'] | users['last_name'])

# Counting and printing the number of users using names as passwords

print(users['uses_name'].count())

# Taking a look at the 12 first rows

print(users.head(12))

当我试图编译这个时,我给出了一个错误:

^{pr2}$

users数据帧中的前12行,其中创建了first_namelast_name列:

id          user_name            password   first_name  last_name
0    1    vance.jennings          joobheco      vance    jennings
1    2    consuelo.eaton        0869347314   consuelo       eaton
2    3   mitchel.perkins        fabypotter    mitchel     perkins
3    4    odessa.vaughan         aharney88     odessa     vaughan
2    3   mitchel.perkins        fabypotter    mitchel     perkins
3    4    odessa.vaughan         aharney88     odessa     vaughan
4    5    araceli.wilder        acecdn3000    araceli      wilder
5    6  shawn.harrington           5278049      shawn  harrington
6    7        evelyn.gay            master     evelyn         gay
7    8       noreen.hale            murphy     noreen        hale
8    9       gladys.ward           lwsves2     gladys        ward
9   10   brant.zimmerman  1190KAREN5572497      brant   zimmerman
10  11     leanna.abbott          aivlys24     leanna      abbott
11  12   milford.hubbard           hubbard    milford     hubbard

Tags: thenamenamespasswordusersfirstlastuser
3条回答

使用^{}

val = np.union1d(users['first_name'], users['last_name'])
users['uses_name'] = users['password'].isin(val)
print (users)
    id         user_name          password first_name   last_name  uses_name
0    1    vance.jennings          joobheco      vance    jennings      False
1    2    consuelo.eaton        0869347314   consuelo       eaton      False
2    3   mitchel.perkins        fabypotter    mitchel     perkins      False
3    4    odessa.vaughan         aharney88     odessa     vaughan      False
2    3   mitchel.perkins        fabypotter    mitchel     perkins      False
3    4    odessa.vaughan         aharney88     odessa     vaughan      False
4    5    araceli.wilder        acecdn3000    araceli      wilder      False
5    6  shawn.harrington           5278049      shawn  harrington      False
6    7        evelyn.gay            master     evelyn         gay      False
7    8       noreen.hale            murphy     noreen        hale      False
8    9       gladys.ward           lwsves2     gladys        ward      False
9   10   brant.zimmerman  1190KAREN5572497      brant   zimmerman      False
10  11     leanna.abbott          aivlys24     leanna      abbott      False
11  12   milford.hubbard           hubbard    milford     hubbard       True

你可以合并,因为它们都是串联的

users['password'].isin(pd.concat([users['first_name'],users['last_name']]))

既然你改变了问题,就更新一个

^{pr2}$

这是有效的: users['uses_name']=(users['password']==users['first_name'])|(users['password']==users['last_name'])

相关问题 更多 >