Python 3.x 如何仅从两个pandas.DataFrame列中获取不同的单词
我有一个带有列id、关键字1和关键字2的数据框架。我只想从列关键字2中获取不在列关键字1中的单词。此外,我还需要清理我的新专栏,用不同的词从无意义的词,如phph,wfgh。。。我只对英语单词感兴趣 例如:Python 3.x 如何仅从两个pandas.DataFrame列中获取不同的单词,python-3.x,pandas,Python 3.x,Pandas,我有一个带有列id、关键字1和关键字2的数据框架。我只想从列关键字2中获取不在列关键字1中的单词。此外,我还需要清理我的新专栏,用不同的词从无意义的词,如phph,wfgh。。。我只对英语单词感兴趣 例如: data = [[1, 'detergent', 'detergent for cleaning stains'], [2, 'battery charger', 'wwfgh, old, glass'], [3, 'sunglasses, black, metal', 'glass ggg
data = [[1, 'detergent', 'detergent for cleaning stains'], [2, 'battery charger', 'wwfgh, old, glass'], [3, 'sunglasses, black, metal', 'glass gggg jik xxx,'], [4, 'chemicals, flammable', 'chemicals, phph']]
df = pd.DataFrame(data, columns = ['id', 'keywords1','keywords2'])
df
让我们试试:
def words_diff(words1, words2)
kw1=words1.str.split()
kw2= words2.str.split()
diff=[x for x in kw2 if x not in kw1]
return diff
df['diff'] = df.apply(lambda x: words_diff(x['keywords1'] , x['keywords2'] ), axis=1)
尝试:
将numpy导入为np
#我们通过每一个1个或更多非字母字符的序列分割得到单词
df[“keywords1”]=df[“keywords1”].str.split(“[^\w+]”).map(集合)
df[“keywords2”]=df[“keywords2”].str.split(“[^\w+]”).map(集合)
df[“关键字3”]=np.位和(np.位异或(df[“关键字1”]、df[“关键字2”]、df[“关键字2”])
#如果希望将其保留为字符串且不设置,则为可选:
df[“关键字3”]=df[“关键字3”].str.join(“,”)
产出:
id。。。关键词3
0 1 ... 清洁,去污
1 2 ... , wwfgh,玻璃,旧
2 3 ... jik,xxx,玻璃,gggg
3 4 ... phph
对于第一部分,您可以concat
启用关键字2
的所有行,拆分
连接版本以获取所有单词,将单词列表转换为集合
,并从关键字1
列中的单词中获取差异。类似于设置(df.keywords1.str.cat().split()).difference(df.keywords2.str.cat().split())
。对于清理部分,您可以研究使用停止字。我已经使用了停止字,但phph或wfgh之类的文本仍将保留在列中。当我尝试运行此命令时:df['diff']=df.apply(lambda x:words_diff(x['keyword1',x['keyword2']),axis=1)我得到KeyError:('keyword1',发生在索引0')“关键字1”和“关键字2”应该是df列的确切名称。我想我在你的例子中犯了错误,应该是关键字1和关键字2定义单词_diff(单词1,单词2):kw1=words1.split(“”)kw2=words2.split(“”)diff=[x为关键字2中的x,如果x不在关键字1中,则返回diff df['diff']=df.apply(lambda x:words_diff(x['keyword1'],x['keyword2']),axis=1)我仍然得到KeyError:('keyword1','出现在索引0'处)