2024-10-05 14:22:07 发布
网友
我有一个测向仪:
name kind phone 0 [John Muller] person [8866155845] 1 [Innovation Division] company NaN 2 [Carol Sway] person [8866155845]
我想找到一个电话号码的副本并合并行。但是df中的对象是list,因此使用:
将生成一个TypeError:unshable type:“list”
我们可以从这个错误中推断出df.duplicated正在使用set来确定重复项,因此序列中的所有对象都必须是散列的。列表不可散列。在
df.duplicated
set
检查您的数据帧,每个name和phone都是一个包含单个字符串的列表。在
name
phone
为什么?如果没有足够的理由(也就是说,每一行的名字和电话号码都不会超过一个),那么就转换成字符串,或者从一开始就将它们创建为字符串。在
将一系列的单项列表项转换为一系列标量。由于有时有NaN,因此可以使用自定义的lambda函数。在
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。在
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]
我们可以从这个错误中推断出
df.duplicated
正在使用set
来确定重复项,因此序列中的所有对象都必须是散列的。列表不可散列。在检查您的数据帧,每个
name
和phone
都是一个包含单个字符串的列表。在为什么?如果没有足够的理由(也就是说,每一行的名字和电话号码都不会超过一个),那么就转换成字符串,或者从一开始就将它们创建为字符串。在
将一系列的单项列表项转换为一系列标量。由于有时有
NaN
,因此可以使用自定义的lambda
函数。在这将使您的系列项可散列,并使您能够使用
pd.DataFrame.duplicated
。在您也可以使用^{} 函数来解决此问题:
相关问题 更多 >
编程相关推荐