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

如何将循环生成的多个DataFrame合并为单个DataFrame?

问题描述

我从CSV文件中获取ID列表,通过for循环为每个ID调用API拉取数据,想要把返回结果合并成一个DataFrame,但目前每次循环都会生成独立的DataFrame,无法合并为一个整体。

现有代码

# 从CSV读取iOS应用ID
data = pd.read_csv('File.csv')
ios = (data['ios_id'])
ios_data= []

# 把iOS ID转成列表
for i in ios:
    ios_data.append(i)

for id in ios_data:
        params = {
                "os": "ios",
                "app_id": id,
                "country": "US",
                "search_term": "kid",
                "auth_token": AUTH_TOKEN
        }

        response = requests.get(BASE_URL, params)
        # print(response.status_code)
        raw = response.json()
        feedback = raw['feedback']
        if feedback != []:
                feedback_dict = feedback[0]
                df = pd.DataFrame(feedback_dict)
                print(df)
        else:
                pass

当前输出

content version  ... country     tags
0  So I love tiles of hop it’s fun but I don’t th...   4.4.0  ...      US   Family
1  So I love tiles of hop it’s fun but I don’t th...   4.4.0  ...      US  Love it

[2 rows x 9 columns]
                                             content  ...           tags
0  This game is, well, fantastic and I love how B...  ...            Ads
1  This game is, well, fantastic and I love how B...  ...         Family
2  This game is, well, fantastic and I love how B...  ...        Hate it
3  This game is, well, fantastic and I love how B...  ...  Inappropriate
4  This game is, well, fantastic and I love how B...  ...        Love it
5  This game is, well, fantastic and I love how B...  ...  Strenuousness

[6 rows x 9 columns]
解决方案

核心问题是每次循环都重新创建了df变量,没有将每次的结果累加存储。按以下方式修改代码即可实现合并:

  1. 初始化一个空列表,用于存放每个API返回的小DataFrame
  2. 循环内生成小DataFrame后,将其添加到该列表中
  3. 循环结束后,使用pd.concat()将所有小DataFrame合并为一个大DataFrame

修改后的代码:

import pandas as pd
import requests

# 从CSV读取iOS应用ID,直接转成列表更高效
data = pd.read_csv('File.csv')
ios_data = data['ios_id'].tolist()
# 初始化列表存储所有反馈数据的DataFrame
all_feedback_dfs = []

for app_id in ios_data:
    params = {
        "os": "ios",
        "app_id": app_id,
        "country": "US",
        "search_term": "kid",
        "auth_token": AUTH_TOKEN
    }

    response = requests.get(BASE_URL, params)
    raw = response.json()
    feedback = raw['feedback']
    
    # 直接判断列表是否非空,写法更简洁
    if feedback:
        feedback_dict = feedback[0]
        df = pd.DataFrame(feedback_dict)
        # 将当前ID的反馈DataFrame加入列表
        all_feedback_dfs.append(df)

# 合并所有小DataFrame,ignore_index重置索引避免重复
final_df = pd.concat(all_feedback_dfs, ignore_index=True)
print(final_df)

额外优化说明

  • 用data['ios_id'].tolist()替代原循环append的方式,代码更简洁高效
  • 用if feedback:替代if feedback != []:,符合Python的简洁判断风格
  • ignore_index=True参数会重置合并后DataFrame的索引,避免出现重复索引问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:40:38