尝试用 numpy 和递归连接数据帧

Trying to concatenate dataframes with numpy and recursion

我有一个 pandas 数据帧的列表,我正在尝试使用递归和 numpy 将它们连接成一个数据帧。

def recur(framelist, index=0, result=0):


    if index == len(framelist)-1:
        return result

    else:
        return recur(np.concatenate((framelist[index],framelist[index+1])))

我上面的意图是将数据帧列表传递给 recur 函数。 基本情况是到达列表末尾时。 功能是连接所有数据帧对

但是我得到一个错误,不能连接 0 维数组

要弄清楚发生了什么,最好一步一步来。

你说你对 recur 的初始调用传递了一个熊猫数据帧列表。您没有显示它们的创建过程,但假设它们类似于...

framelist = [
    pd.DataFrame(np.array([1, 2, 3])),
    pd.DataFrame(np.array([4, 5])),
    pd.DataFrame(np.array([6, 7])),
    pd.DataFrame(np.array([8]))
    ]

因此,第一次通过它将 framelist 中的前两个条目连接为 numpy 数组。

[[1], [2],  [3]]  and [[4], [5]]

这将生成一个 numpy ndarray,如下所示:

[[1], [2], [3], [4], [5]]

这个结果作为新的框架列表传递给 recur()

第二次通过它连接 framelist 中的前两个条目。

[1] and [2]

这将生成一个 numpy 数组,如下所示:

[1, 2]

这个结果作为新的框架列表传递给 recur()

第三次连接框架列表中的前两个条目。

1 and 2

这些只是数字,不是数组,所以你会看到错误 '0 dimensional arrays cannot be concatenated'

下面是一个如何使用递归进行连接的示例。您不需要使用任何类型的索引参数来跟踪。只需继续从列表中删除第一个并将其余部分传递给 recur。当你到达列表中只剩下 1 个的时候,它会被传回并与前一个连接起来。结果传回并与前一个连接,依此类推。

def recur(framelist):
    # keep going until there's just 1 left.
    if len(framelist) == 1:
        return framelist[0]

    return np.concatenate((framelist[0], recur(framelist[1:])))

print(recur(framelist))