【发布时间】:2022-01-14 02:29:39
【问题描述】:
我有一个包含 250,000 个条目的大型数据集,我正在处理的文本列包含一个句子是每一行。
import pandas as pd
import spacy
nlp = spacy.load('en_core_web_sm')
from faker import Faker
fake = Faker()
df = pd.read_csv('my/huge/dataset.csv')
(e,g) --> df = pd.DataFrame({'text':['Michael Jackson was a famous singer and songwriter.']})
因此,我试图从文本文件中查找人名,并将其替换为 faker 库中的假名,并将结果添加到新列中,如下所示。
person_list = [[n.text for n in doc.ents] for doc in nlp_news_sm.pipe(df.text.values) if [n.label_ == 'PER' for n in doc.ents]]
flat_person_list = list(set([item for sublist in person_list for item in sublist]))
fake_person_name = [fake.name() for n in range(len(flat_person_list))]
name_dict = dict(zip(flat_person_list, fake_person_name))
df.name = df.text.replace(name_dict, regex=True)
问题是它需要很长时间才能运行,我不知道如何提高代码的性能,所以它可以运行得更快。
【问题讨论】:
-
首先,尝试使用
regex=False。那么,你的替换名称字典有多大? -
您也可以将问题重命名为 pandas text replace performance。
-
感谢您的回复。 peron_list 有 163784 个元素,因此 dict 具有几乎相同数量的键,并且值也相同 spacy pipline 运行速度也非常慢,我想这是因为我使用了很多列表理解。
标签: python pandas list performance