如何迭代处理API返回数据向pandas DataFrame追加且不覆盖原有索引
问题原因
你第一次尝试出错的核心是:df["Strike Price"] = xxx 是对整个Strike Price列做全局赋值,每次循环都会把整列的值替换为当前的单个行权价,自然只会保留最后一次循环的结果。
另外你目前的临时方案存在参数错误:pd.Series()的第一个参数是数据序列,第二个是索引,你逐位传20个行权价的写法,实际上只会把第一个行权价作为Series的值,后面19个都会被当成索引,最终生成的Series只有1条数据,不符合预期。
最优解决方案
不需要循环,也不需要手动拼接Series,直接用列表推导式批量提取所有行权价,一次性生成DataFrame即可:
import pandas as pd # 批量提取所有Call的行权价到列表 strike_list = [item['Call']['strikePrice'] for item in ochain['OptionChainResponse']['OptionPair']] # 直接构造DataFrame,后续要加其他列只需在字典中新增键值对即可 df = pd.DataFrame({ "Strike Price": strike_list })
如果需要提取更多字段(比如Put的相关数据),只需新增对应的列表推导式即可,示例:
df = pd.DataFrame({ "Strike Price": [item['Call']['strikePrice'] for item in ochain['OptionChainResponse']['OptionPair']], "Call最新成交价": [item['Call']['lastPrice'] for item in ochain['OptionChainResponse']['OptionPair']], "Put最新成交价": [item['Put']['lastPrice'] for item in ochain['OptionChainResponse']['OptionPair']] })
概念性处理指导
处理嵌套API响应转DataFrame的通用逻辑:
- 优先把嵌套结构拍平成等长的字典/列表序列,再一次性传入Pandas构造器,尽量避免逐行/逐元素操作Pandas对象,既减少出错概率,也能获得更高的执行效率
- 不要手动按索引取单个元素拼接数据,只要目标字段的层级结构一致,直接用列表推导式批量提取是最简洁的方案
- 如果确实需要逐行处理(比如有复杂的字段判断逻辑),可以用
df.loc[行索引, 列名]逐行赋值,不要直接对整列赋值
内容的提问来源于stack exchange,提问作者AJ Bomber
相关产品推荐
相关产品推荐

