【问题标题】:Getting all unique elements from a pandas DataFrame column of numpy arrays of strings从 numpy 字符串数组的 pandas DataFrame 列中获取所有唯一元素
【发布时间】:2021-01-06 07:52:32
【问题描述】:

我有一个熊猫数据框df,其中一列col 的元素是numpy.ndarraystr 类型。例如,

col
['I like tea', 'cricket ']
['basket ball', 'I like coffee', 'cricket ']
['I like tea', 'cricket ']
['basket ball', 'cricket ']

现在我想在col 中获取此类唯一numpy.ndarray 的数量,以将其转换为分类列,其中新列包含每个唯一numpy.ndarray 的正整数值。当我使用df['col'].unique 时,它会抛出以下错误

TypeError: unhashable type: 'numpy.ndarray'

如何查找此numpy.ndarray 列的唯一元素数?

  • 编辑: 我期待的输出是,

    ['我喜欢茶', '板球'],['篮球', '我喜欢咖啡', '板球'],['篮球', '板球'] 这些是col 列中的唯一列表。我希望将这些输出。

  • 编辑 2: 当我将col 的每个列表转换为一个元组时,我得到了所需的结果。为什么会这样?

【问题讨论】:

  • 请添加上述示例的预期输出
  • 在编辑中添加了示例输出
  • @MonkeyDLuffy 您添加的预期输出不是唯一的
  • 发生这种情况是因为元组是可散列的......而列表不是......
  • 既然 pandas 数据框是可变类型,为什么它的列必须是不可变的?为什么 df['column'].unique() 要求列具有不可变类型?

标签: python pandas dataframe numpy data-science


【解决方案1】:

您应该将 np 数组转换为可散列类型..

试试这个:

df['col'].apply(tuple).unique()

或者,如果您想要列表中的唯一个人而不是自己列出:

df['col'].apply(tuple).explode().unique()

【讨论】:

    【解决方案2】:

    从来不知道路飞学蟒蛇打败凯多。哈哈

    你应该试试这个:

    df['col']=[list(i) for i in df['col']]
    list(df['col'].value_counts().index)
    

    【讨论】:

    • 例如它返回 4 而不是 3
    • @MonkeyDLuffy 您需要唯一列表或这些列表中的唯一元素吗?
    • 该特定列中的唯一列表。我添加了预期的输出
    • 编辑时出错。现在改正了。
    • @MonkeyDLuffy 我已经编辑了答案,现在检查
    猜你喜欢
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多