我正在尝试提取有特殊字符的密码,并将这些密码导出到新的数据框中。 Dataframe如下所示:
Password
*jafad,gwu
klfcv[(+%
12qwe&rghj
bcnyfd254
abcdefghij
我试图以下列方式提取密码:
data = pd.read_excel("password.xlsx", names = ['Password'])
def SpecialChar():
special = pd.Series(data['Password']).str.findall(r'([^a-zA-Z0-9]+)')
print(special)
SpecialChar()
但查询显示的结果如下所示:
[*,]
[{)+%]
[&]
[]
[]
如何仅在不同的数据框中使用特殊字符提取密码?
预期产出:
Password
*jafad,gwu
klfcv[(+%
12qwe&rghj
答案 0 :(得分:3)
~
使用isalnum
和a = data[~data['Password'].str.isalnum()]
print (a)
Password
0 *jafad,gwu
1 klfcv[(+%
2 12qwe&rghj
反转掩码,并按boolean indexing
过滤:
NaN
如果某些na=False
添加参数a = data[data['Password'].str.contains(r'[^a-zA-Z0-9]+', na=False)]
,则使用str.contains
作为掩码:
{{1}}
答案 1 :(得分:0)
根据您自己的方法,将findall
更改为contains
def SpecialChar():
special = data['Password'][pd.Series(data['Password']).str.contains(r'([^a-zA-Z0-9]+)')]
print(special)
SpecialChar()
0 *jafad,gwu
1 klfcv[(+%
2 12qwe&rghj
答案 2 :(得分:0)
作为另一个代码,也可以使用Python的传统正则表达式匹配方法,如下所示。但是,我也推荐jezrael代码。
import re
import pandas as pd
data = pd.DataFrame({"Password": ["*jafad,gwu",
"klfcv[(+%",
"12qwe&rghj",
"bcnyfd254",
"abcdefghij"]})
data.loc[data['Password'].apply(lambda x: bool(re.search(r'[^a-zA-Z0-9]+', x)))]
# Out[36]:
# Password
# 0 *jafad,gwu
# 1 klfcv[(+%
# 2 12qwe&rghj