You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

while循环打乱多个Pandas DataFrame时报bool对象不可下标访问错误

错误原因
  1. CheckBlockOrder函数的循环逻辑错误:仅检查了第一个两两组合(键1和键2)就直接返回结果,没有遍历所有组合。
    • 初始状态下8个DataFrame完全一致,第一次调用函数时1和2相等,返回[pair, False]列表类型,取索引[1]正常运行。
    • 你将键1的DataFrame打乱后,第二次调用函数时1和2不再相等,函数直接返回布尔值True,此时对布尔值执行[1]下标操作就会触发TypeError: 'bool' object is not subscriptable。
  2. 函数返回值类型不统一:找到重复时返回列表,未找到重复时返回布尔值,也会导致后续取值逻辑报错。
  3. 逻辑判断不严谨:仅第一个组合不相等不能代表所有DataFrame都无重复,比如2和3仍可能重复,原函数会直接误判为无重复。
修复方案

首先修正CheckBlockOrder函数,统一返回值格式,遍历所有两两组合后再判断是否存在重复:

# 注意不要用dict作为参数名,会覆盖Python内置的dict关键字
def CheckBlockOrder(block_dict):
    key_list = list(block_dict.keys())
    # 遍历所有两两组合
    for pair in itertools.combinations(key_list, 2):
        if block_dict[pair[0]].equals(block_dict[pair[1]]):
            # 找到重复,返回(重复键对, 是否全部唯一)
            return pair, False
    # 所有组合都无重复
    return None, True

然后调整while循环逻辑,匹配修正后的返回值:

while True:
    repeat_pair, is_all_unique = CheckBlockOrder(dictCon)
    if is_all_unique:
        break
    # 打乱重复对第一个键对应的DataFrame,pandas自带sample方法打乱更简洁
    df_shuffled = dictCon[repeat_pair[0]].sample(frac=1).reset_index(drop=True)
    dictCon[repeat_pair[0]] = df_shuffled

内容的提问来源于stack exchange,提问作者Catherine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 08:15:04