首页 > 解决方案 > 迭代函数并用 pandas 写入新列

问题描述

我有一个熊猫数据框,其中一列包含每行的一些文本,另一列为空。使用我拥有的函数,我想从每一行中提取命名实体,并将实体的名称及其类型写在空列中。但是,我不完全确定如何在第一列的每一行上调用该函数,并将结果写入第二列的同一行。

最初,Dataframe 看起来有点像这样:在此处输入图像描述

但是,调用该函数后,实体列应填写文本内的实体。

这是我到目前为止所拥有的

import os
import nltk
import pandas as pd
from nltk import ne_chunk, pos_tag
from nltk.tokenize import sent_tokenize, word_tokenize

root = '/Users/ben/documents/humanotics/intent model/'
incorpus = root + '/chats/test.csv'
outcorpus = root + '/chats/output.csv'
entities = ['ORGANIZATION','PERSON','LOCATION','DATE','TIME','MONEY','PERCENT','FACILITY','GPE']

df = pd.DataFrame()
data = pd.read_csv(incorpus, header=None, names=['text','entities'])
df = df.append(data)

def findEntity(text):
    try:
        entity_names = []
        entity_names_lc = []
        for sent in nltk.sent_tokenize(incorpus):
            for chunk in nltk.ne_chunk(nltk.pos_tag(nltk.word_tokenize(sent))):
                if hasattr(chunk, 'label') and chunk.label:
                    for e in entities:
                        if chunk.label() == e:
                            name_value = ' '.join(child[0] for child in chunk.leaves())
                            if name_value.lower() not in entity_names_lc:
                                entity_names.append(name_value)
                                entity_names_lc.append(name_value.lower())
    except:
        print ("Unexpected error:", sys.exc_info()[0])

    print(entity_names_lc)

    return

df.to_csv(outcorpus)

任何帮助表示赞赏,谢谢。

标签: pythonpandasnltk

解决方案


使用申请

def f(x):

 #do_somthing
 return value_to_store_in_second_col_at_same_row
df['second_col'] = df['first_col'].apply(lambda x:f(x))


推荐阅读