我正在尝试将函数应用于pandas列,然后检索函数的属性。具体来说,我正在使用TextBlob从一栏意见中提取情绪和极性。
这是我要运行的示例代码。
opinion = ['good', 'bad','horrible']
df = pd.DataFrame(opinion, columns=['comment'])
df.head()
comment
0 good
1 bad
2 horrible
我要运行的伪代码是
from textblob import TextBlob
df['sentiment'] = df.comment.apply(TextBlob).sentiment
哪个引发AttributeError。
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
in
----> 1 df.comment.apply(TextBlob).sentiment
~\AppData\Local\Continuum\miniconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name)
5177 if self._info_axis._can_hold_identifiers_and_holds_name(name):
5178 return self[name]
-> 5179 return object.__getattribute__(self, name)
5180
5181 def __setattr__(self, name, value):
AttributeError: 'Series' object has no attribute 'sentiment'
我当时正在考虑为此使用getattr()
函数,但是它不起作用。
df.comment.apply(TextBlob).apply(getattr,sentiment)
如何应用函数并为列获取属性?
答案 0 :(得分:1)
尝试创建一个自定义函数以返回所需的值。
def get_sentiment(x):
_ = TextBlob(x)
return _.sentiment
df['comment'].apply(get_sentiment)
答案 1 :(得分:1)
您可以在此处使用attrgetter
,它是getattr
的“咖喱”版本:
from operator import attrgetter
df.comment.apply(TextBlob).apply(attrgetter('sentiment'))
如果TextBlob
被“向量化”了,可能有一种更有效的方法来计算所有项目的情感,但是目前尚不清楚如何实现TextBlob
。 / p>