首页 > 解决方案 > 循环遍历目录时代码不起作用:TypeError:__array_function__ 的调度程序没有返回可迭代

问题描述

我正在尝试创建一个布尔列('flag_rise'),它标记数字在不同列('Zoom')中增加的实例 - 因此当数字大于它之前的数字时将其标记为 True。我编写的代码在一个文件上运行时有效,但是当我尝试通过目录运行它时,出现此错误:TypeError:array_function的调度程序没有返回可迭代。我在网上找不到太多关于这个错误的信息。我通过在文件子集上运行代码来仔细检查文件,我得到了同样的错误。这些文件都以相同的方式格式化。任何帮助表示赞赏。

这是代码:

directory = os.chdir(r"directory")

# create list of files
dir_list = os.listdir(directory)

for file in dir_list:
    
    def rise (a):
        return np.concatenate((False),a[1:] > a[:-1])
    df['flag_rise'] = rise(df.Zoom.values)

标签: pythonpandasnumpy

解决方案


concatenate需要一个数组列表(或至少一个iterable)作为第一个参数。第二个应该是一个整数,一个axis.

In [421]: np.concatenate((False),np.array([True, False]))
Traceback (most recent call last):
  File "<ipython-input-421-2e0a61c32e56>", line 1, in <module>
    np.concatenate((False),np.array([True, False]))
  File "<__array_function__ internals>", line 5, in concatenate
TypeError: dispatcher for __array_function__ did not return an iterable

第一个论点是(False)。() 在这里什么都不做,这只是False,而不是列表、元组或其他可迭代的。第二个参数是一个数组。

更改括号以包裹两者False和数组是不够的,因为False它仍然是一个标量(或 0d 数组):

In [422]: np.concatenate([False,np.array([True, False])])
Traceback (most recent call last):
  File "<ipython-input-422-f6c715674042>", line 1, in <module>
    np.concatenate([False,np.array([True, False])])
  File "<__array_function__ internals>", line 5, in concatenate
ValueError: zero-dimensional arrays cannot be concatenated

False个清单,然后就可以了:

In [423]: np.concatenate([[False],np.array([True, False])])
Out[423]: array([False,  True, False])

concatenate将列表的所有元素转换为数组:

In [425]: np.array(False)
Out[425]: array(False)
In [426]: _.shape
Out[426]: ()
In [427]: __.ndim
Out[427]: 0

它不能将 () 形状数组连接到轴 0 上的 (2,) 形状。数组必须匹配维数。


推荐阅读