【发布时间】:2021-11-12 20:24:05
【问题描述】:
我有一个 DataFrame,它在一列中包含一些(文本)清理过的广告,在另一列中包含对相同广告的一些非常基本的描述。我还将术语频率以“关键字”:频率格式存储在字典中。
任务是从df 中的列表中清除低于某个频率截止点水平的所有术语。
import pandas as pd
adset = {"ID": ["(1483785165, 2009)", "(1538280431, 2010)", "(1795044103, 2010)"],
"Body":[['price', '#', 'bedrooms', '#', 'bathrooms', '#', 'garage'],['cindy', 'lavender', 'mid', 'state', 'realty'],['upgrades', 'galore', 'perfectly', 'maintained', 'home', 'formals']]}
df = pd.DataFrame(adset)
keyword_dict={}
for row in data['Body']:
for word in row:
if word in keyword_dict:
keyword_dict[word]+=1
else:
keyword_dict[word]=1
这就是我卡住的地方:
def remove_sparse_words_from_df(df, term_freq, cutoff=1):
for row in df['Body']:
for word in row:
if term_freq[word]<=cutoff:
return df
我的整个方法可能会失败 - 性能是一个大问题,df 有大约 350k 行,“Body”列中的列表可能包含从几百到几千不等的单词。将所有数据存储在 pandas df 而不是列表中的原因是我想保留 ID 列,以便以后可以将我的数据连接到我已经对广告进行的其他一些分析。
【问题讨论】: