Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何仅从两个pandas.DataFrame列中获取不同的单词_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 如何仅从两个pandas.DataFrame列中获取不同的单词

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

我有一个带有列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 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

对于第一部分,您可以con
cat
启用
关键字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'处)