当我使用下面的代码时,发生了AttributeError。详情如下所示
import pandas as pd
import numpy as np
from pandas import DataFrame as df
import re
data = {'Tim': 'Tim@google.com', 'Rob': 'Rob@gmail.com', 'Jen': 'Jen@gmail.com', 'Wes': np.nan}
data = pd.Series(data)
pattern = r'([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\.([A-Z]{2,4})'
matches = data.str.match(pattern, flags=re.IGNORECASE)
matches.str.get(1)
下面显示的是发生的AttributeError
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-13-e12b5eab19b6> in <module>
6 matches = data.str.match(pattern, flags=re.IGNORECASE)
7
----> 8 matches.str.get(1)
AttributeError: Can only use .str accessor with string values!
---------------------------------------------------------------------------
如何解决上述错误以获得以下答案
In : matches.str.get(1)
Out:
Tim google
Rob gmail
Jen gmail
Wes NaN
您需要执行以下操作:
如果您的最终目标是获得所需的结果,那么您可以简单地解析数据
您的示例数据:
我们可以简单地使用
str
方法和split
函数,如下所示,我们将获得所需的名称或
您可以使用@Allen的解决方案,将
match()
替换为findall()
,因为它符合要求,因为您有系列数据data = pd.Series(data)
,请参见下面的区别findall()查找序列/索引中所有出现的模式或正则表达式。相当于对所有元素应用re.findall()
match()确定每个字符串是否与正则表达式匹配。调用re.match()并返回布尔值
为了解决这个错误,
AttributeError: Can only use .str accessor with string values!
您应该使用astype(str).str
,因为data
有它所抱怨的浮点值.
所以,你可以尝试下面的方法,但不返回你想要的
相关问题 更多 >
编程相关推荐