如何从python中具有方括号的正则表达式输出中提取内容

时间:2016-05-08 07:29:36

标签: python regex pandas replace dataframe

我有一个Python的(2.7)Pandas DF,它的列看起来像这样:

       email
['jsaw@yahoo.com']
['jfsjhj@yahoo.com']
['jwrk@yahoo.com']
['rankw@yahoo.com']

我想从中提取电子邮件而不使用方括号和单引号。输出应该是这样的:

     email
jsaw@yahoo.com
jfsjhj@yahoo.com
jwrk@yahoo.com
rankw@yahoo.com

我尝试过这个答案的建议:Replace all occurrences of a string in a pandas dataframe (Python)。但它不起作用。任何帮助将不胜感激。

编辑: 如果我有超过1维的数组怎么办?类似的东西:

          email
  ['jsaw@yahoo.com']
  ['jfsjhj@yahoo.com']
  ['jwrk@yahoo.com']
  ['rankw@yahoo.com','fsffsnl@gmail.com']
  ['mklcu@yahoo.com','riserk@gmail.com', 'funkdl@yahoo.com']

是否可以将输出放在三个不同的列中,而不使用方括号和单引号。

2 个答案:

答案 0 :(得分:4)

如果type值为string,您可以使用str.strip

print type(df.at[0,'email'])
<type 'str'>

df['email'] = df.email.str.strip("[]'")
print df
              email
0    jsaw@yahoo.com
1  jfsjhj@yahoo.com
2    jwrk@yahoo.com
3   rankw@yahoo.com

如果typelist apply Series

print type(df.at[0,'email'])
<type 'list'>

df['email'] = df.email.apply(pd.Series)
print df
              email
0    jsaw@yahoo.com
1  jfsjhj@yahoo.com
2    jwrk@yahoo.com
3   rankw@yahoo.com

编辑:如果数组中有多个值,则可以使用:

df1 = df['email'].apply(pd.Series).fillna('')
print df1
                  0                  1                 2
0    jsaw@yahoo.com                                     
1  jfsjhj@yahoo.com                                     
2    jwrk@yahoo.com                                     
3   rankw@yahoo.com  fsffsnl@gmail.com                  
4   mklcu@yahoo.com   riserk@gmail.com  funkdl@yahoo.com

答案 1 :(得分:0)

试试这个:

from re import findall
s = "['rankw@yahoo.com']"                     
m = findall(r"\[([A-Za-z0-9@'._]+)\]", s) 
print(m[0].replace("'",''))