python - AttritubeError:使用 .apply() 到 dataFrame 时,list' 对象没有属性 'map'
问题描述
这就是我的名为“电子邮件”的数据框的样子(只有一行包含“文本”和“POS_Tag”列):
打印(电子邮件)
我试图apply()
通过首先将函数定义为在我的数据帧上使用:
def extractGrammar(email):
tag_count_data = pd.DataFrame(email['POS_Tag'].map(lambda x: Counter(tag[1] for tag in x)).to_list())
# Print count Part of speech tag needed for Adjective, Adverbs, Nouns and Verbs
email = pd.concat([email, tag_count_data], axis=1).fillna(0)
pos_columns = ['PRP','MD','JJ','JJR','JJS','RB','RBR','RBS', 'NN', 'NNS','VB', 'VBS', 'VBG','VBN','VBP','VBZ']
for pos in pos_columns:
if pos not in email.columns:
email[pos] = 0
email = email[['text'] + pos_columns]
email['Adjectives'] = email['JJ'] + email['JJR'] + email['JJS']
email['Adverbs'] = email['RB'] + email['RBR'] + email['RBS']
email['Nouns'] = email['NN'] + email['NNS']
email['Verbs'] = email['VB'] + email['VBS'] + email['VBG'] + email['VBN'] + email['VBP'] + email['VBZ']
return email
我试图将我的电子邮件作为具有以下apply()
功能的对象传递:
emails = emails.apply(extractGrammar, axis=1)
我刚刚收到此错误:
AttributeError: 'list' object has no attribute 'map'
我之前在包含多行电子邮件的 CSV 文件的“extractGrammar”函数中使用了完全相同的代码块,除了它在没有使用应用的函数之外以非常手动和按时间顺序排列的方式使用。我无法弄清楚似乎出了什么问题。
解决方案
您会得到该结果,因为当您apply()
将extractGrammar()
函数传递给 DataFrame 时,它将 DataFrame 的每一行传递给函数。然后,当您访问该['POS Tag']
列时,它不会返回整个系列,而是返回该POS Tag
行的该单元格的内容,这是一个列表。列表没有map
方法。如果您尝试计算POS Tag
列中每个元组的第二个元素的出现次数,您可以尝试以下操作:
tag_count_data = Counter([x[1] for x in email['POS Tag']])
这将为您提供该单独行的标签的第二个元素的计数器。
推荐阅读
- algorithm - 关于实现标签设置/校正/动态规划的问题
- outlook - Outlook 可操作消息未显示在 Outlook 桌面客户端(2001 版)中
- python - 为什么 Cloud Function 采用不同的时区/时间?
- react-native - react native - 没有 Google Play 服务的推送通知
- java - 从静态上下文引用非静态方法
- nearprotocol - 验证者奖励如何在 NEAR 协议上持续存在?
- typescript - 如何在未定义文档的情况下在 Web Worker 中运行 CodeMirror“runMode”?
- odoo-12 - 如何解决那个odoo存储库问题?
- python - ERR_ADDRESS_INVALID,404 未找到,本地主机:8000
- c# - 为什么 DateTime dd/MM/yyyy 不更改为 yyyy-MM-dd?