大熊猫中是否有办法从系列中删除重复项?

时间:2019-06-05 19:36:15

标签: python python-3.x pandas

我有一个dataframe,在“标签”(Tags)列中有一些重复的标签,中间用逗号隔开,有没有一种方法可以从系列中删除重复的字符串。我希望400中的输出只有博物馆,饮酒,购物。

我无法分割逗号并删除它们,因为该系列中的某些标签具有相似的词,例如:[博物馆,美术馆,购物],因此拆分和删除多个博物馆字符串会影响唯一的“美术馆的弦。

Desired Output

5 个答案:

答案 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)))