分层抽样后Bootstrapping:分组抽样遇‘float不可迭代’错误求助
问题解决:分组抽样时的"float object is not iterable"错误
错误原因
你的mapper生成的是每个Base对应的Score值列表,但sample(n=...)需要的是整数类型的抽样数量。当你把列表传给n参数时,内部逻辑尝试迭代这个列表(而它实际是单个数值的列表,甚至可能包含float),就会抛出"float object is not iterable"错误。
你真正需要的是:统计dfu中每个Base的行数,以此作为dfi对应分组的抽样数量,这样才能保证抽样后结构和dfu一致。
修正代码
# 重新生成mapper:统计dfu中每个Base的样本量(行数) mapper = dfu['Base'].value_counts().to_dict() print(mapper) # 分组抽样,注意处理dfi中某Base数量不足的情况(可选加replace=True允许有放回) j = dfi.groupby('Base').apply(lambda x: x.sample(n=mapper[x.name], replace=False)) print(j)
额外说明
- 如果
dfi中某个Base的行数少于dfu中对应Base的行数,不加replace=True会报错,此时根据你的需求选择:replace=True:允许有放回抽样,保证抽够指定数量- 提前过滤掉dfi中数量不足的分组,或者调整抽样数量
内容的提问来源于stack exchange,提问作者Hami
相关产品推荐
相关产品推荐

