【问题标题】:How to remove duplicates in a list of strings in a pandas column Python如何删除熊猫列Python中字符串列表中的重复项
【发布时间】:2018-09-14 04:39:26
【问题描述】:

我正在尝试删除 Pandas DataFrame 中列下的字符串列表中的重复字符串。

例如;列表值:

[btc, btc, btc]

应该是;

[btc]

我尝试了多种方法,但似乎都没有,因为我无法访问列表中的字符串值。非常感谢任何帮助。

数据帧:

          dollar_sign  followers_count  \
0                   [btc]            35946
1                   [btc]            35946
2                   [btc]            35946
3                   [nav]            35946
4         [btc, btc, btc]            35946

访问列下的字符串列表

for row in df_twitter['dollar_sign']:
    print row

输出:

[btc]
[btc]
[btc]
[nav]
[btc, btc, btc]

【问题讨论】:

    标签: python list pandas numpy duplicates


    【解决方案1】:

    更简单,并将系列重新转换为列表,以便您可以堆叠、取消堆叠等:

    df['column_name'] = df['column_name'].apply(set).apply(list)
    

    【讨论】:

      【解决方案2】:

      从透露的信息来看,我相信 OP 的 df 实际上并不是充满了字符串列表,而是看起来像列表的字符串。

      从OP的打印结果中,我们看到

      [btc]
      [btc]
      [nav]
      [btc, btc,btc]
      

      但是,如果它是字符串列表,它应该产生

      ['btc']
      ['btc']
      ['btc']
      ['nav']
      ['btc', 'btc', 'btc']
      

      解决办法:

      df = pd.DataFrame({
              'dollar_sign':['[btc]','[btc]','[btc]','[nav]','[btc, btc, btc]'],
              'followers_count':[35946,35946,35946,35946,35946]}
           )
      
      
      df.dollar_sign.str[1:-1].str.split(",\s").map(set)
      
      0    {btc}
      1    {btc}
      2    {btc}
      3    {nav}
      4    {btc}
      Name: dollar_sign, dtype: object
      
      • .str[1:-1] 删除 []

      • str.split(",\s") 用“、”、逗号和空格分隔。 (假设字符串使用“,”作为分隔符,否则,您可能需要"\s*,\s*" 或更复杂的东西。)

      • map(set) 将每个列表变成一个集合。

      【讨论】:

        【解决方案3】:

        list可以和map一起使用,set可以得到唯一值

        df['dollar_sign']=list(map(set,df['dollar_sign']))
        df
        Out[1068]: 
          dollar_sign  followers_count
        0       {btc}            35946
        1       {btc}            35946
        2       {btc}            35946
        3       {nav}            35946
        4       {btc}            35946
        

        这就是我创建 df 的方式

        df=pd.DataFrame({'dollar_sign':[['btc'],['btc'],['btc'],['nav'],['btc','btc','btc']],'followers_count':[35946,35946
        ,35946
        ,35946
        ,35946
        ]})
        

        【讨论】:

        • 它给了我的价值; {c, [, b, ], t}
        • 它是一样的,但仍然没有得到那个
        【解决方案4】:

        您可以使用集合。一组将取出重复项。

        所以,作为一个例子,保持输出的风格:

        for row in df_twitter['dollar_sign']:
            print list(set(row))
        

        输出:

        [btc]
        [btc]
        [btc]
        [nav]
        [btc]
        

        【讨论】:

        • 我想就是这样!这会将原始数据框列更新为这些值吗?
        • 不,这个问题的其他答案会告诉你如何修改它们,这只是为了展示。
        • 这不起作用 - 它给了我这个:[c, [, b, ], t]
        • 这个答案没有错,正如 Tai 指出的那样,你没有得到你想要的可能的原因 - 你在每个单元格中拥有的不是一个真正的列表,而是一个有[] 在里面。否则 Mangu 的代码应该运行良好。
        猜你喜欢
        • 2019-03-27
        • 1970-01-01
        • 2020-02-25
        • 2019-01-10
        • 2023-03-24
        • 2019-11-05
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        相关资源
        最近更新 更多