搜索密码中的特殊字符并将这些密码导出到pandas数据帧

时间:2017-10-05 14:56:23

标签: python regex pandas dataframe

我正在尝试提取有特殊字符的密码,并将这些密码导出到新的数据框中。 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 

3 个答案:

答案 0 :(得分:3)

~使用isalnuma = 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