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

Python遍历目录处理数据报错:__array_function__调度器未返回可迭代对象

问题修复方案

报错核心原因

你触发报错的直接问题是np.concatenate的调用参数完全不符合要求:

  • np.concatenate第一个参数必须是待拼接的数组组成的可迭代序列,你写的np.concatenate((False),a[1:] > a[:-1])把两个拆分对象分别传成了第一、第二个参数,且(False)是布尔标量不是数组,也不是合法的单元素元组(单元素元组需要加末尾逗号写成(False,))。

除此之外你的代码还有多处逻辑错误,导致批量处理完全无法正常运行:

  • os.chdir()的返回值为None,你将其赋值给directory后调用os.listdir(directory)属于逻辑漏洞
  • 循环内没有读取文件的逻辑,df变量未定义或始终复用全局变量,无法逐个处理目录下的文件
  • 将rise函数定义放在循环内,属于不必要的重复定义,会拖低运行效率

修复后的代码

方案1:修复原有的numpy实现逻辑

import os
import pandas as pd
import numpy as np

# 路径处理
dir_path = r"你的目标目录路径"
dir_list = os.listdir(dir_path)

# 把函数定义移到循环外
def rise(a):
    # 第一个参数传数组组成的元组,False转为长度为1的布尔数组
    return np.concatenate((np.array([False]), a[1:] > a[:-1]))

for file in dir_list:
    # 补全文件读取逻辑,根据你的文件格式调整读取函数,比如csv用read_csv,xlsx用read_excel
    file_full_path = os.path.join(dir_path, file)
    df = pd.read_csv(file_full_path)
    df['flag_rise'] = rise(df.Zoom.values)
    # 补全保存逻辑,根据你的需求调整输出路径和格式
    df.to_csv(file_full_path, index=False)

方案2:用pandas原生方法实现,更简洁不易出错

不用单独封装numpy函数,直接用pandas的shift方法对比前一行值,代码更易读:

import os
import pandas as pd

dir_path = r"你的目标目录路径"
dir_list = os.listdir(dir_path)

for file in dir_list:
    file_full_path = os.path.join(dir_path, file)
    df = pd.read_csv(file_full_path)
    # shift(1)会把列值整体向下挪一行,第一行没有前值默认返回NaN,和NaN比较结果为False,刚好符合需求
    df['flag_rise'] = df['Zoom'] > df['Zoom'].shift(1)
    df.to_csv(file_full_path, index=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:54:01