Python Pandas Series批量API数据追加重复问题求助
问题解决思路
核心问题
你每次循环都固定取了API返回列表的第一个元素(data[0]),所以所有行都重复第一个数据;而直接去掉[0]报错,是因为data是列表类型,只能用数字索引,不能用字符串(如'symbol')直接索引。
解决方案
1. 把API返回数据转成字典(按symbol映射)
先将返回的列表数据转换成以symbol为键的字典,这样可以快速通过symbol1匹配对应的数据:
batch_api_call_url = f'http example' data = requests.get(batch_api_call_url).json() # 转换为symbol->数据的字典 data_dict = {item['symbol']: item for item in data}
2. 循环时匹配对应symbol的数据
遍历CSV里的symbol1时,从字典中取出对应的数据,不再固定取data[0]:
# 假设你是循环遍历symbol_list(从CSV读取的名称列表) rows = [] for symbol1 in symbol_list: # 用get方法避免symbol不存在时报错,默认返回空字典 symbol_data = data_dict.get(symbol1, {}) row = pd.Series( [ symbol1, symbol_data.get('symbol', 'N/A'), symbol_data.get('latestPrice', 'N/A'), symbol_data.get('marketCap', 'N/A'), 'N/A' ], index=my_columns ) rows.append(row) # 用concat替代已弃用的append方法,拼接成最终DataFrame final_dataframe = pd.concat(rows, axis=1).T.reset_index(drop=True) print(final_dataframe)
补充说明
- 用
dict.get()方法是为了应对某个symbol在API返回中不存在的情况,避免抛出KeyError,同时可以指定默认值(如'N/A')。 - 推荐用
pd.concat()替代DataFrame.append(),因为后者已被pandas弃用,且批量拼接性能更优。
内容的提问来源于stack exchange,提问作者Monomezurashi
相关产品推荐
相关产品推荐

