我正在使用pandas groupby,并希望应用该函数从组中的项目中制作一个集。TypeError: 'type' object is not iterable
中的结果如下:
df = df.groupby('col1')['col2'].agg({'size': len, 'set': set})
但下面的作品:
def to_set(x):
return set(x)
df = df.groupby('col1')['col2'].agg({'size': len, 'set': to_set})
在我的理解中这两种表达方式是相似的,第一种不起作用的原因是什么?
4条答案
按热度按时间svmlkihl1#
更新
set
,不会产生TypeError: 'type' object is not iterable
。原始答案
这是因为
set
是type
的type
,而to_set
是type
的function
:根据docs,
.agg()
预计:参数:
function
或dict
用于聚合组的函数。
function
,则必须在传递DataFrame
时运作,或在传递至DataFrame.apply
时运作。dict
,则关键字必须是DataFrame
列名。可接受的组合为:
string
代码化函数名function
list
个函数dict
列-〉函数dict
名称-〉函数的字典bkhjykvo2#
请尝试使用:
对我有用。
4dbbbstv3#
如果出现以下错误,请更新Pandas的较新版本
第一个
ar5n3qh54#
如果使用
.agg({'set': set})
产生以下错误,请更新Pandas 1.3.3版:TypeError: Unable to infer the type of the field set
个如果只是使用前面建议的
.agg({'set': lambda x: set(x)})
解决方案,则会持续出现这种情况其原因是
set
在_aggregate
(detailed explanation here, courtesy of @EdChum)中不满足is_list_like
因此,解决方案是使用以下命令将其强制转换为列表:
.agg({'set': lambda x: list(set(x))})