gpt4 book ai didi

python - .isin() 和字符串的奇怪问题(Python/Pandas)

转载 作者:太空狗 更新时间:2023-10-30 01:04:50 24 4
gpt4 key购买 nike

我在使用 Pandas .isin() 方法时遇到了一个奇怪的问题。我正在做一个项目,我需要根据长度、常用词/密码列表等来识别错误密码(别担心,这是来自公共(public)资源)。其中一种方法是查看是否有人使用他们姓名的一部分作为密码。我正在使用 .isin() 来确定是否是这种情况,但它给了我奇怪的结果。显示:

# Extracting first and last names into their own columns
users['first_name'] = users.user_name.str.extract('(^.+)(\.)', expand = False)[0]
users['last_name'] = users.user_name.str.extract('\.(.+)', expand = False)

# Flagging the users with passwords that matches their names
users['uses_name'] = (users['password'].isin(users.first_name)) | (users['password'].isin(users.last_name))

# Looking at the new data
print(users[users['uses_name']][['password','user_name','first_name','last_name','uses_name']].head())

这个的输出是:

   password            user_name first_name  last_name uses_name
7 murphy noreen.hale noreen hale True
11 hubbard milford.hubbard milford hubbard True
22 woodard jenny.woodard jenny woodard True
30 reid rosanna.reid rosanna reid True
58 golden rosalinda.rodriquez rosalinda rodriquez True

大部分都很好; milford.hubbard 正在使用“hubbard”作为密码等。但是我们有几个像第一个这样的例子。 Noreen Hale 被标记了,尽管她的密码是“murphy”,与她的名字只有一个字母。

我一辈子都弄不明白是什么原因造成的。有谁知道为什么会这样,以及如何解决?

最佳答案

由于您需要比较同一行中的相邻列,因此矢量化在这里不是一个很好的选择。因此,您可以使用(可能)最快的替代方法:列表理解:

df['uses_name'] = [
pwd in name for name, pwd in zip(df.user_name, df.password)
]

或者,如果您不喜欢循环,您可以使用 np.vectorize 隐藏它们:

def f(name, pwd):
return pwd in name

v = np.vectorize(f)
df['uses_name'] = v(df.user_name, df.password)

df
password user_name uses_name
7 murphy noreen.hale False
11 hubbard milford.hubbard True
22 woodard jenny.woodard True
30 reid rosanna.reid True
58 golden rosalinda.rodriquez False

考虑到您从 user_name 中提取了 first_namelast_name,我认为您在这里不需要它。

关于python - .isin() 和字符串的奇怪问题(Python/Pandas),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49120963/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com