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

将字典数据追加到Pandas DataFrame产生冗余行,求优化代码方案

API行情数据提取存入DataFrame优化方案

问题原因

你原有代码每次调用append仅传入单个字段的字典,每次调用都会新增一行,未传入的字段默认填充NaN,5次循环共执行40次append,最终得到40行半缺省数据,不符合需求。

优化方案

推荐优先使用「先存列表再统一转DataFrame」的写法,执行效率远高于循环追加DataFrame,也更适配高频更新的场景。

单次处理最新API返回数据代码

import pandas as pd

# 存放单批次所有行数据
rows = []
# res为你从API获取的最新字典数据
for x in range(5):
    bid_item = res["Bids"][x]
    ask_item = res["Asks"][x]
    # 一次性组装单条完整数据
    rows.append({
        "bidsize": bid_item["Size"],
        "bidprice": bid_item["Price"],
        "bid_to": bid_item["TotalOrders"],
        "bid_buyback": bid_item["BuyBackMarketMaker"],
        "asksize": ask_item["Size"],
        "askprice": ask_item["Price"],
        "ask_to": ask_item["TotalOrders"],
        "ask_buyback": ask_item["BuyBackMarketMaker"]
    })

# 生成目标DataFrame
df = pd.DataFrame(rows)
# 导出为CSV
df.to_csv("latest_bid_ask.csv", index=False, encoding="utf-8-sig")
print(df)

持续1秒更新、累加历史数据代码

如果需要长期采集每秒的最新数据,可使用如下写法:

import pandas as pd
import time

# 存放全量历史数据
all_data = []
# 可自定义采集次数,设置为while True可永久采集
collect_count = 60

for _ in range(collect_count):
    # 此处替换为你调用API获取最新res的代码
    # res = your_api_request_func()
    for x in range(5):
        bid_item = res["Bids"][x]
        ask_item = res["Asks"][x]
        all_data.append({
            "bidsize": bid_item["Size"],
            "bidprice": bid_item["Price"],
            "bid_to": bid_item["TotalOrders"],
            "bid_buyback": bid_item["BuyBackMarketMaker"],
            "asksize": ask_item["Size"],
            "askprice": ask_item["Price"],
            "ask_to": ask_item["TotalOrders"],
            "ask_buyback": ask_item["BuyBackMarketMaker"]
        })
    # 间隔1秒获取下一次数据
    time.sleep(1)

# 导出全量历史数据
df_all = pd.DataFrame(all_data)
df_all.to_csv("history_bid_ask.csv", index=False, encoding="utf-8-sig")

兼容旧版pandas append写法(不推荐)

如果你使用的pandas版本低于2.0,必须沿用append逻辑,可修改为如下写法:

import pandas as pd

# 提前定义列名
df1 = pd.DataFrame(columns=["bidsize","bidprice","bid_to","bid_buyback","asksize","askprice","ask_to","ask_buyback"])
for x in range(5):
    bid_item = res["Bids"][x]
    ask_item = res["Asks"][x]
    # 单次append完整行数据,不要拆分单个字段追加
    df1 = df1.append({
        "bidsize": bid_item["Size"],
        "bidprice": bid_item["Price"],
        "bid_to": bid_item["TotalOrders"],
        "bid_buyback": bid_item["BuyBackMarketMaker"],
        "asksize": ask_item["Size"],
        "askprice": ask_item["Price"],
        "ask_to": ask_item["TotalOrders"],
        "ask_buyback": ask_item["BuyBackMarketMaker"]
    }, ignore_index=True)

print(df1)
df1.to_csv("bid_ask_data.csv", index=False, encoding="utf-8-sig")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:51:01