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

如何通过循环从函数结果创建多个DataFrame或合并为单表

问题与解决方案

场景说明

我有一个调用API获取数据的函数getAPICore(Year),输入参数为年份。现在有一个包含唯一年份的DataFrame base_years,需要循环调用该函数,实现两个目标:

  1. 生成多个以年份命名的DataFrame;
  2. 将所有结果追加到单个DataFrame中,新增年份维度。

问题1:生成多个以年份命名的DataFrame

原代码错误原因

你写的output_df_ + b_years = pd.DataFrame(getAPICore(b_years))属于语法错误,Python不允许通过字符串拼接的方式直接创建变量名。

正确实现方式

推荐用字典来存储这些DataFrame,既安全又方便后续调用:

# 初始化空字典存储各年份的DataFrame
year_dfs = {}

# 遍历base_years的年份列(假设年份存放在第一列,可根据实际调整索引)
for b_year in base_years.iloc[:, 0]:
    if b_year != '' and b_year >= 2017:
        # 以年份为键,存储对应的DataFrame
        year_dfs[f"output_df_{b_year}"] = pd.DataFrame(getAPICore(b_year))

后续要调用某一年的DataFrame,直接用year_dfs["output_df_2017"]即可。

如果一定要生成全局变量(不推荐,容易污染命名空间),可以用globals():

for b_year in base_years.iloc[:, 0]:
    if b_year != '' and b_year >= 2017:
        globals()[f"output_df_{b_year}"] = pd.DataFrame(getAPICore(b_year))

问题2:追加到单个DataFrame并添加年份维度

原代码错误原因

pd.DataFrame.append()是DataFrame的实例方法,不能直接用类调用;而且每次赋值outputdf_name = ...会覆盖之前的结果,导致最终只有最后一次的数据。

正确实现方式

方法1:循环追加(适合数据量不大的场景)

# 初始化空DataFrame
output_df = pd.DataFrame()

for b_year in base_years.iloc[:, 0]:
    if b_year != '' and b_year >= 2017:
        # 调用API获取数据并转为DataFrame
        temp_df = pd.DataFrame(getAPICore(b_year))
        # 添加年份列作为新维度
        temp_df['year'] = b_year
        # 追加到主DataFrame(pd.concat比append高效,append已被官方弃用)
        output_df = pd.concat([output_df, temp_df], ignore_index=True)

方法2:先收集再合并(更高效,适合数据量大的场景)

df_list = []

for b_year in base_years.iloc[:, 0]:
    if b_year != '' and b_year >= 2017:
        temp_df = pd.DataFrame(getAPICore(b_year))
        temp_df['year'] = b_year
        df_list.append(temp_df)

# 一次性合并所有DataFrame
output_df = pd.concat(df_list, ignore_index=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 02:10:18