如何解析AttributeError:只能使用带字符串值的.str访问器

2024-06-16 09:28:29 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用下面的代码时,发生了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 

Tags: importrecompandasdatagetasgmail
2条回答

您需要执行以下操作:

matches = data.str.findall(pattern, flags=re.IGNORECASE)
matches.str.get(0).str.get(1)

如果您的最终目标是获得所需的结果,那么您可以简单地解析数据

您的示例数据:

print(data)
Tim    Tim@google.com
Rob     Rob@gmail.com
Jen     Jen@gmail.com
Wes               NaN

我们可以简单地使用str方法和split函数,如下所示,我们将获得所需的名称

df.str.split('.').str[-2]
Tim    google
Rob     gmail
Jen     gmail
Wes       NaN

您可以使用@Allen的解决方案,将match()替换为findall(),因为它符合要求,因为您有系列数据data = pd.Series(data),请参见下面的区别

findall()查找序列/索引中所有出现的模式或正则表达式。相当于对所有元素应用re.findall()

match()确定每个字符串是否与正则表达式匹配。调用re.match()并返回布尔值

pattern = r'([A-Z0-9._%+-]+)@([A-Z0-9.-]+)\.([A-Z]{2,4})'
matches = data.str.findall(pattern, flags=re.IGNORECASE)
matches.str.get(0).str.get(1)
Tim    google
Rob     gmail
Jen     gmail
Wes       NaN
dtype: object

为了解决这个错误,AttributeError: Can only use .str accessor with string values!您应该使用astype(str).str,因为data有它所抱怨的浮点值.

所以,你可以尝试下面的方法,但不返回你想要的

matches.astype(str).str.get(1)
Tim    r
Rob    r
Jen    r
Wes    a

相关问题 更多 >