当前位置: 首页 > 知识库问答 >
问题:

如何在循环中从字典填充数据帧

水焱
2023-03-14

我试图对文本进行实体分析,我想把结果放在数据框中。目前,结果不存储在字典中,也不存储在数据框中。结果用两个函数提取。

df:

ID    title    cur_working    pos_arg         neg_arg                             date
132   leave    yes            good coffee     management, leadership and salary   13-04-2018
145   love it  yes            nice colleagues long days                           14-04-2018

我有以下代码:

result = entity_analysis(df, 'neg_arg', 'ID')

#This code loops through the rows and calls the function entities_text()
def entity_analysis(df, col, idcol):
    temp_dict = {}
    for index, row in df.iterrows():
        id = (row[idcol])
        x = (row[col])
        entities = entities_text(x, id)
        #temp_dict.append(entities)
    #final = pd.DataFrame(columns = ['id', 'name', 'type', 'salience'])
    return print(entities)

def entities_text(text, id):
    """Detects entities in the text."""
    client = language.LanguageServiceClient()
    ent_df = {}
    if isinstance(text, six.binary_type):
        text = text.decode('utf-8')

    # Instantiates a plain text document.
    document = types.Document(
        content=text,
        type=enums.Document.Type.PLAIN_TEXT)

    # Detects entities in the document.
    entities = client.analyze_entities(document).entities

    # entity types from enums.Entity.Type
    entity_type = ('UNKNOWN', 'PERSON', 'LOCATION', 'ORGANIZATION',
                   'EVENT', 'WORK_OF_ART', 'CONSUMER_GOOD', 'OTHER')

    for entity in entities:
        ent_df[id] = ({
            'name': [entity.name],
            'type': [entity_type[entity.type]],
            'salience': [entity.salience]
        })
    return print(ent_df)

该代码给出了以下结果:

{'132': {'name': ['management'], 'type': ['OTHER'], 'salience': [0.16079013049602509]}}
{'132': {'name': ['leadership'], 'type': ['OTHER'], 'salience': [0.05074194446206093]}}
{'132': {'name': ['salary'], 'type': ['OTHER'], 'salience': [0.27505040168762207]}}
{'145': {'name': ['days'], 'type': ['OTHER'], 'salience': [0.004272154998034239]}}

我已经在函数中创建了temp_dict和一个最终数据框entity_analysis()。这个线程解释了在循环中附加到数据帧是没有效率的。我不知道如何以有效的方式填充数据框。这些线程与我的问题相关,但它们解释了如何从存量数据填充数据框。当我尝试使用temp_dict.update(实体)并返回temp_dict时,我得到一个错误:

在entity_analysistemp_dict.update(实体)TypeError:'NoneType'对象是不可迭代的

我希望输出如下:

ID          name                  type                salience
132         management            OTHER               0.16079013049602509 
132         leadership            OTHER               0.05074194446206093 
132         salary                OTHER               0.27505040168762207 
145         days                  OTHER               0.004272154998034239 

共有1个答案

满玉泽
2023-03-14

一种解决方案是通过可迭代的实体创建列表。然后将您的列表输入pd。数据

LoL = []

for entity in entities:
    LoL.append([id, entity.name, entity_type[entity.type], entity.salience])

df = pd.DataFrame(LoL, columns=['ID', 'name', 'type', 'salience'])

如果您还需要当前生成的格式的字典,那么您可以将当前逻辑添加到您的for循环中。但是,首先检查是否需要使用两个结构来存储相同的数据。

 类似资料:
  • 我对JSF非常陌生,我需要一些帮助来完成我认为非常简单的任务。我想从数组或循环之类的东西填充selectonemenu。我有一个表格,我想让用户输入他们的DOB。我想要的只是一个简单的列表,他们可以从中进行选择。。每月的第31天。我不想要31岁 标签。我试图在我的支持bean中放入一个“getDates”方法,但效果不好。如有任何建议,我们将不胜感激。

  • 问题内容: 这个问题已经在这里有了答案 : 如何并行地遍历两个列表? (7个答案) 5年前关闭。 我正在尝试使用for循环创建字典。这是我的代码: 输出: 为什么? 我正计划将其输出: 为什么不以这种方式输出?我们如何使其正确输出? 问题答案: 或者

  • 我有以下代码: 在其中,我想创建一个名为“”的新的”,其键与原始dict

  • 我试着学习如何从for循环构建和填充pandas数据帧?但我似乎无法将我的价值观写入我的专栏。 最终,我从一个网页中获取数据,并希望将其放入一个数据框中。 我的标题预定义为: 现在我有了在for循环中得到的值,如何将这些行写入每一列,然后重复到第1列到第17列,再重复到下一行? 示例输出行1 示例输出第2行 预期产量 任何帮助都将不胜感激。

  • 问题内容: 我创建了一个GUI,并在外部获取了一个数据库。我正在NetBeans中使用GUI构建器来执行此操作。有谁知道用来自数据库的值填充jComboBox的简单方法吗?当我运行项目时,没有错误,但组合框保持为空。 这是设置带有折扣名称的组合框的代码: 它位于与jComboBox对象不同的类中。此类称为模型。 这是我以称为DiscountGUIView的形式调用setDiscountNames方

  • 我可以使用fstring与字典: 我还可以填充字符串: 我希望能够将字典中的字符串填充到我的fstring中。 我试过: 这里的错误是: 文件",第1行 语法错误:f字符串:不允许单个'}' 这是可能的,还是我必须在使用之前先将填充字符串添加到字典中?