python - 迭代函数并用 pandas 写入新列
问题描述
我有一个熊猫数据框,其中一列包含每行的一些文本,另一列为空。使用我拥有的函数,我想从每一行中提取命名实体,并将实体的名称及其类型写在空列中。但是,我不完全确定如何在第一列的每一行上调用该函数,并将结果写入第二列的同一行。
但是,调用该函数后,实体列应填写文本内的实体。
这是我到目前为止所拥有的
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)
任何帮助表示赞赏,谢谢。
解决方案
使用申请
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))
推荐阅读
- python - 网页列表中的大 tekst
- visual-studio-code - 如何将 VSCode css.customData 用于 postcss 语法
- docker - 如何同时启动 2 个容器 docker
- amazon-web-services - 无法在 AWS 服务器上安装 OpenOnload
- python - sort pandas DataFrame with a column with list
- vscode-debugger - 如何在 VS CODE 中配置文件重定向环境?
- godot - godot - 如何动态更改子节点的精灵
- java - 使用 ASM 监视 Java 中的对象创建时出现“VerifyError:期望在堆栈上找到对象/数组”?
- mysql - Django OneToOneField 没有创建表
- python - 如何在特定条件下打印数字?