【问题标题】:Split the distinct values in a list separated by a comma拆分以逗号分隔的列表中的不同值
【发布时间】:2021-11-22 05:37:11
【问题描述】:

我有一个熊猫数据框

index DevType Count
1 Developer, back-end 3086
2 Developer, back-end;Developer, front-end;Devel... 2227
3 Developer, back-end;Developer, full-stack 1476
4 Developer, front-end 1401
5 Developer, back-end;Developer, desktop or ente... 605
6 Developer, embedded applications or devices 433

这是通过在列上应用.value_counts() 来实现的,正如您所看到的,开发人员重复了它与其他答案相结合,从这个数据框中我想创建一个可能的单词列表来计算每个单词的数量稍后重复.

我先尝试了下面的代码来查找唯一值

unqlist=list(df_new['DevType'].unique())

通过使用“unqlist”,我尝试使用以下代码分隔不同的单词

possiblewords=[]
for word in unqlist:
    print(word.split(','))
   possiblewords.append(word)

它不工作

【问题讨论】:

  • 您可以使用set 获取列表中的所有唯一元素。如果您想将所有单词分开,则必须修改输入列表。 set(devtype_list) 给出结果。目前尚不清楚您要如何更改唯一列表的列表元素,但我假设您想要拆分元素?但是然后呢?
  • 请在 DevType 列中查看此数据集一次 insights.stackoverflow.com/survey 多个答案被推入单个单元格,我想要唯一值的计数,我尝试设置但多个答案组合在引号中,所以它不工作
  • 不,您应该提供数据、示例以及您希望输出的内容。我不会为所有需要帮助的人下载文件。
  • 正如@3DspatialUser 所说,您打算使用distinct() 方法执行的操作可以使用集合来实现。不过有一些事情困扰着我:在不同的字符串中有,;。你只想要冒号作为分隔符,还是分号也一样?我实际上认为分号是您示例中的分隔符。此外,您的示例列表中有一个nan。那正确吗?不应该是None,还是我们可能在处理 numpy 或 pandas 数据结构?
  • 是的,我以错误的方式构建了问题,我将其删除并再次询问,谢谢您的帮助

标签: python pandas dataframe data-cleaning


【解决方案1】:

这是一个例子:

list(set(''.join(filter(lambda x: isinstance(x, str), devtype_list)).split(',')))

【讨论】:

    【解决方案2】:

    您可以使用,; 作为分隔符来拆分列表以分隔唯一的单词。

    def split_words(x):
        return sum(list(map(lambda y: y.split(";"), x.split(','))), [])
    
    devtype_list = ['Developer, desktop or enterprise applications;Developer, full-stack', 'Developer, full-stack;Developer, mobile', 'nan', 'Designer;Developer, front-end;Developer, mobile', 'Developer, back-end;Developer, front-end;Developer, QA or test;DevOps specialist', 'Developer, back-end;Developer, desktop or enterprise applications;Developer, game or graphics', 'Developer, full-stack', 'Database administrator;']
    newlist = list(set(sum(list(map(lambda x: split_words(x), devtype_list)), [])))
    newlist = list(map(lambda x: x.strip(), newlist))
    
    for unique_word in newlist:
        print(unique_word)
    

    结果:

    Developer
    front-end
    
    Designer
    desktop or enterprise applications
    game or graphics
    mobile
    Database administrator
    QA or test
    DevOps specialist
    nan
    back-end
    full-stack
    

    【讨论】:

      【解决方案3】:

      您可以使用 Pandas .str.split() 以逗号和分号分割,将结果放入一个 numpy 数组中。然后,使用np.unique得到二维数组展平到一维数组后的唯一词,如下:

      import numpy as np
      
      list_all = df_new['DevType'].str.split(r'(?:,|;)\s*').dropna().to_numpy()
      
      list_unique = np.unique(sum(list_all, []))
      

      结果:

      print(list_unique)
      
      ['Devel...' 'Developer' 'back-end' 'desktop or ente...'
       'embedded applications or devices' 'front-end' 'full-stack']
      

      【讨论】:

      • TypeError: can only concatenate list (not "float") to list 我在list_unique = np.unique(sum(list_all, []))在线收到此错误
      • 这个错误是因为 NaN 吗?
      • @KrishnaGannamaneni 是的,可能是因为NaN
      • @KrishnaGannamaneni 让我自定义代码来处理这个问题。
      • 是的,我放弃了 Nan 行,它的工作就像一个魅力,非常感谢你的帮助对我来说是无价的,为此花了五个小时编写循环:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      相关资源
      最近更新 更多