如何解决如何解决-ValueError:无法使用长度与Python中的值不同的多索引选择索引器进行设置
我有一些示例代码,可用于使用Google的自然语言API分析实体及其情感。对于我的Pandas数据框中的每条记录,我想返回一个字典列表,其中每个元素都是一个实体。但是,在尝试将其用于生产数据时遇到了问题。这是示例代码
from google.cloud import language_v1 # version 2.0.0
import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'path/to/json'
import pandas as pd
# establish client connection
client = language_v1.LanguageServiceClient()
# helper function
def custom_analyze_entity(text_content):
global client
#print("Accepted Input::" + text_content)
document = language_v1.Document(content=text_content,type_=language_v1.Document.Type.PLAIN_TEXT,language = 'en')
response = client.analyze_entity_sentiment(request = {'document': document})
# a document can have many entities
# create a list of dictionaries,every element in the list is a dictionary that represents an entity
# the dictionary is nested
l = []
#print("Entity response:" + str(response.entities))
for entity in response.entities:
#print('=' * 20)
temp_dict = {}
temp_Meta_dict = {}
temp_mentions = {}
temp_dict['name'] = entity.name
temp_dict['type'] = language_v1.Entity.Type(entity.type_).name
temp_dict['salience'] = str(entity.salience)
sentiment = entity.sentiment
temp_dict['sentiment_score'] = str(sentiment.score)
temp_dict['sentiment_magnitude'] = str(sentiment.magnitude)
for Metadata_name,Metadata_value in entity.Metadata.items():
temp_Meta_dict['Metadata_name'] = Metadata_name
temp_Meta_dict['Metadata_value'] = Metadata_value
temp_dict['Metadata'] = temp_Meta_dict
for mention in entity.mentions:
temp_mentions['mention_text'] = str(mention.text.content)
temp_mentions['mention_type'] = str(language_v1.EntityMention.Type(mention.type_).name)
temp_dict['mentions'] = temp_mentions
#print(u"Appended Entity::: {}".format(temp_dict))
l.append(temp_dict)
return l
我已经在样本数据上对其进行了测试,并且效果很好
# works on sample data
data= ['Grapes are good. Bananas are bad.','the weather is not good today','Michelangelo Caravaggio,Italian painter,is kNown for many arts','look i cannot articulate how i feel today but its amazing to be back on the field with runs under my belt.']
input_df = pd.DataFrame(data=data,columns = ['freeform_text'])
for i in range(len(input_df)):
op = custom_analyze_entity(input_df.loc[i,'freeform_text'])
input_df.loc[i,'entity_object'] = op
但是当我尝试使用下面的代码通过生产数据来解析它时,它会失败并出现多索引错误。我无法使用示例熊猫数据框重现该错误。
for i in range(len(input_df)):
op = custom_analyze_entity(input_df.loc[i,'entity_object'] = op
...
Traceback (most recent call last):
File "<stdin>",line 3,in <module>
File "/opt/conda/default/lib/python3.6/site-packages/pandas/core/indexing.py",line 670,in __setitem__
iloc._setitem_with_indexer(indexer,value)
File "/opt/conda/default/lib/python3.6/site-packages/pandas/core/indexing.py",line 1667,in _setitem_with_indexer
"cannot set using a multi-index "
ValueError: cannot set using a multi-index selection indexer with a different length than the value
解决方法
尝试这样做:
input_df.loc[0,'entity_object'] = ""
for i in range(len(input_df)):
op = custom_analyze_entity(input_df.loc[i,'freeform_text'])
input_df.loc[i,'entity_object'] = op
或者对于您的特定情况,您不需要使用 loc 功能。
input_df["entity_object"] = ""
for i in range(len(input_df)):
op = custom_analyze_entity(input_df.loc[i,'freeform_text'])
input_df["entity_object"][i] = op
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。