pandas:类型错误:不可损坏类型:“list”

2024-10-05 14:22:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个测向仪:

                     name                   kind               phone

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

我想找到一个电话号码的副本并合并行。但是df中的对象是list,因此使用:

^{pr2}$

将生成一个TypeError:unshable type:“list”


Tags: name副本phone电话号码nanjohncompanylist
3条回答

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

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

为什么?如果没有足够的理由(也就是说,每一行的名字和电话号码都不会超过一个),那么就转换成字符串,或者从一开始就将它们创建为字符串。在

将一系列的单项列表项转换为一系列标量。由于有时有NaN,因此可以使用自定义的lambda函数。在

for col in ['name', 'phone']:
    df[col] = df[col].apply(lambda x: next(iter(x)) if isinstance(x, list) else x)

这将使您的系列项可散列,并使您能够使用pd.DataFrame.duplicated。在

您也可以使用^{}函数来解决此问题:

# 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]

相关问题 更多 >