尝试用 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))
我有一个 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))