我有一个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']
是否可以将输出放在三个不同的列中,而不使用方括号和单引号。
答案 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
如果type
为list
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("'",''))