在循环获取API数据时,如何为Pandas DataFrame添加id列?
解决方案:为每个DataFrame添加对应ID标识列
你不需要用data.apply()来实现这个需求——直接给DataFrame新增一列并赋值当前循环的id即可,这是最简洁高效的方式。之前用apply失败是因为它的用途是对行/列执行自定义函数,而这里只需要给整列设置固定值,完全没必要用它。
另外注意原代码存在两个小问题,一并修正:
offets是拼写错误,应该是offsets- 循环中直接修改
base_url会导致后续请求的URL不断累加(比如第一次循环后base_url变成了基础URL+id+页码,第二次循环会在这个基础上再叠加),建议用临时变量拼接当前请求的URL。
修正后的核心循环代码如下:
# 先把原始基础URL存起来,避免循环中被修改 original_base_url = "你的基础API地址" # 例如 "https://api.example.com/items/" for page in offsets: # 用原始URL拼接当前请求的完整地址 current_url = f"{original_base_url}{id}{page}" response = requests.get(current_url, auth=auth) # 原代码多了一个多余的右括号,已移除 output_from_api = response.json() raw_data.append(output_from_api) data = pd.DataFrame(output_from_api['elements']) # 新增一列并填充当前循环对应的id data['source_id'] = id # 列名可以根据需求自定义,比如直接叫'id' dataframes_contact.append(data)
效果说明
每个循环生成的DataFrame都会新增一列(比如source_id),该列的所有行值都等于当前处理的id。后续你如果用pd.concat(dataframes_contact)合并所有DataFrame,就能通过这一列快速区分不同ID对应的数据集。
内容的提问来源于stack exchange,提问作者qbbq
相关产品推荐
相关产品推荐

