我有一个dataframe,在“标签”(Tags)列中有一些重复的标签,中间用逗号隔开,有没有一种方法可以从系列中删除重复的字符串。我希望400中的输出只有博物馆,饮酒,购物。
我无法分割逗号并删除它们,因为该系列中的某些标签具有相似的词,例如:[博物馆,美术馆,购物],因此拆分和删除多个博物馆字符串会影响唯一的“美术馆的弦。
答案 0 :(得分:0)
在没有代码示例的情况下,我将一些可行的方法组合在一起。
import pandas as pd
test = [['Museum', 'Art Museum', 'Shopping', "Museum"]]
df = pd.DataFrame()
df[0] = test
df[0]= df.applymap(set)
Out[35]: 0 0 {Museum, Shopping, Art Museum}
答案 1 :(得分:0)
您可以创建一个函数,该函数从给定的字符串中删除重复项。然后将此功能应用于您的列标签。
def remove_dup(strng):
'''
Input a string and split them
'''
return ', '.join(list(dict.fromkeys(strng.split(', '))))
df['Tags'] = df['Tags'].apply(lambda x: remove_dup(x))
演示:
import pandas as pd
my_dict = {'Tags':["Museum, Art Museum, Shopping, Museum",'Drink, Drink','Shop','Visit'],'Country':['USA','USA','USA', 'USA']}
df = pd.DataFrame(my_dict)
df['Tags'] = df['Tags'].apply(lambda x: remove_dup(x))
df
输出:
Tags Country
0 Museum, Art Museum, Shopping USA
1 Drink USA
2 Shop USA
3 Visit USA
答案 2 :(得分:0)
您可以用逗号分割并转换为set()
,在用str.strip()
删除前导/后缀空格后,该副本将删除重复项。然后,您可以df.apply()
将其添加到您的列中。
df['Tags']=df['Tags'].apply(lambda x: ', '.join(set([y.strip() for y in x.split(',')])))
答案 3 :(得分:0)
一种避免使用apply
# in your code just s = df['Tags']
s = pd.Series(['','', 'Tour',
'Outdoors, Beach, Sports',
'Museum, Drinking, Drinking, Shopping'])
(s.str.split(',\s+', expand=True)
.stack()
.reset_index()
.drop_duplicates(['level_0',0])
.groupby('level_0')[0]
.agg(','.join)
)
输出:
level_0
0
1
2 Tour
3 Outdoors,Beach,Sports
4 Museum,Drinking,Shopping
Name: 0, dtype: object
答案 4 :(得分:0)
也许会有更奇特的方式来做这些事情。 但会做的。
使其小写
data['tags'] = data['tags'].str.lower()
以逗号分隔标签col中的每一行,它将返回字符串列表
data['tags'] = data['tags'].str.split(',')
将函数str.strip映射到列表的每个元素(删除尾随空格)。 应用集合函数返回当前单词的集合并删除重复项
data['tags'] = data['tags'].apply(lambda x: set(map(str.strip , x)))