pandas performance:text 列替换很慢
pandas performance:text column replacement is slow
我有一个包含 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)
问题是 运行 需要很长时间,我不确定如何提高代码的性能,这样才能 运行 更快。
好的,感谢 Florian C 的评论,我认为我在 pandas 中找到了一种更好的文本替换方法。
Spacy 模型仍然需要很多时间,但那部分我无法更改,但是,我决定使用 map 和 lambda 而不是 str.replace,所以现在最后一行如下:
df.name = df.text.map(lambda x:name_dict.get(x,x))
我有一个包含 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)
问题是 运行 需要很长时间,我不确定如何提高代码的性能,这样才能 运行 更快。
好的,感谢 Florian C 的评论,我认为我在 pandas 中找到了一种更好的文本替换方法。 Spacy 模型仍然需要很多时间,但那部分我无法更改,但是,我决定使用 map 和 lambda 而不是 str.replace,所以现在最后一行如下:
df.name = df.text.map(lambda x:name_dict.get(x,x))