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

将Pandas中append方法替换为concat改写Capterra API数据代码

适配新版Pandas的Capterra API数据获取代码改写

Pandas 2.0+ 已弃用DataFrame.append()方法,官方推荐使用pd.concat()替代。下面是针对你的代码的改写,同时优化了循环中逐行添加数据的性能(避免循环内频繁创建DataFrame):

关键改动点

  • 替换cp_data_df.append(record, ...):不再循环逐行添加字典,而是先将所有API返回的record收集到列表中,最后一次性转为DataFrame,性能更优。
  • 替换data.append(cp_data_df, ...):用pd.concat()合并DataFrame,符合新版Pandas规范。

改写后的完整代码

from datetime import date, timedelta
import requests
import json
import pandas as pd

for i in range(1, 2):
    # time.sleep(10)
    last_date = date.today() - timedelta(days=i)
    print(last_date)
    data = pd.DataFrame()
    for category in category2:  # 重命名变量避免和外层循环i冲突
        url = f"https://public-api.capterra.com/v1/clicks?start_date={last_date}&end_date={last_date}&category={category}"
        headers = {"Authorization": ""}  # 记得填入你的授权token
        r = requests.get(url=url, headers=headers)

        # Data extract to csv
        cp_data_df = pd.DataFrame()
        if r.status_code != 200:
            print("\n*** something went wrong *** ", r)
            r.raise_for_status()
        else:
            response_dict = json.loads(r.text)
            if "data" in response_dict and response_dict["data"]:
                # 先收集所有record到列表,再一次性转DataFrame
                records_list = []
                for record in response_dict["data"]:
                    records_list.append(record)
                cp_data_df = pd.DataFrame(records_list)

                grp_instances = ["category"]
                cp_data_df = cp_data_df.groupby(grp_instances).sum("cost").reset_index()
                cp_data_df["Date"] = last_date
            # 用concat替代append合并到data
            data = pd.concat([data, cp_data_df], ignore_index=True)

    data2 = data.drop_duplicates(subset=['category'])
    data2['Date'] = pd.to_datetime(data2['Date']).dt.floor('D')  # 替代astype的更清晰写法

额外说明

  • 重命名了内层循环的变量i为category,避免和外层循环的i变量冲突,提升代码可读性。
  • 使用f-string重构了URL拼接,比字符串拼接更简洁易读。
  • 日期处理改用dt.floor('D'),比直接astype更符合Pandas日期操作的规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 17:30:31