pandas:TypeError:不可用类型:' list'

时间:2018-04-25 10:43:05

标签: python list pandas hash duplicates

我有一个df:

                     name                   kind               phone

0                 [John Muller]             person             [8866155845]
1                 [Innovation Division]     company            NaN
2                 [Carol Sway]              person             [8866155845]

我希望找到电话号码的副本并合并行。但是df中的对象是list,所以使用:

df.duplicated('phone')

将生成TypeError:unhashable类型:' list'

4 个答案:

答案 0 :(得分:1)

你也可以使用applymap函数来解决这个问题非常方便:

# get duplicated row
df2 = df[df.applymap(lambda x: x[0] if isinstance(x, list) else x).duplicated('phone')]

print(df2)

           name    kind         phone
2  [Carol Sway]  person  [8866155845]

答案 1 :(得分:0)

我们可以从此错误中推断df.duplicated正在使用set来确定重复项,因此系列中的所有对象都必须是可清除的。列表不可用。

检查您的数据框,每个namephone都是一个包含单个字符串的列表。

为什么呢?如果没有足够好的理由(即,每行永远不会有多个名称和电话)转换为字符串,或者从第一个位置创建字符串。

答案 2 :(得分:0)

将您的一系列单项列表项转换为一系列标量。由于有时您有@x: ~"solid 1px"; .res (@border) { border-top: @x; border-left: @x; border-right: @x; border-bottom: @x; } .border-top{ .res (@x); .border-left{ .res (@x); } } ,因此您可以使用自定义NaN功能。

lambda

这会使您的系列项目可以播放,并允许您使用for col in ['name', 'phone']: df[col] = df[col].apply(lambda x: next(iter(x)) if isinstance(x, list) else x)

答案 3 :(得分:0)

使用可以使用:

from hashable_df import hashable_df
hashable_df(df).duplicated('phone')

这将使所有不可哈希的单元格值可哈希化,并且此类操作将起作用。

相关问题