【问题标题】:Building a DataFrame recursively in Python with pd.concat使用 pd.concat 在 Python 中递归构建 DataFrame
【发布时间】:2023-01-12 19:58:26
【问题描述】:
def recursive_df (n):
if n==1:
return pd.DataFrame({"A":[1],"B":[1]})
if n>=2:
return pd.concat(recursive_df(n-1),{"A":[n],"B":[n*n]} )
这是行不通的,我看不出“为什么”的原因以及我应该怎么做?
类型错误:第一个参数必须是 pandas 对象的可迭代对象,你
传递了一个“DataFrame”类型的对象
实际上,我想解决的真正问题是我创建了一些数据帧作为某些函数的输出来存储结果,我想将它们连接起来。
为了优雅,我想避免循环
谢谢
【问题讨论】:
标签:
python
pandas
recursion
【解决方案1】:
您需要在concat 中使用列表并传递DataFrame,而不是字典:
def recursive_df (n):
if n==1:
return pd.DataFrame({"A":[1],"B":[1]})
if n>=2:
return pd.concat([recursive_df(n-1), pd.DataFrame({"A":[n],"B":[n*n]})])
例子:
recursive_df(2)
A B
0 1 1
0 2 4
recursive_df(3)
A B
0 1 1
0 2 4
0 3 9
请注意,对于这个特定示例,您不需要递归。一个简单的向量化代码会更有效率:
import numpy as np
def generate_df(n):
s = np.arange(1, n+1)
return pd.DataFrame({'A': s, 'B': s**2})
generate_df(3)