如何遍历pandas DataFrame将每行转JSON对象分批上传至远程数据库
解决方案
你可以直接对原始DataFrame按固定批次大小切片,不需要逐行遍历存入普通数组,就能一次性解决你遇到的两个问题,同时修正原有代码的逻辑错误。
核心修改点
- 按批次大小直接切分DataFrame,每段切片本身是DataFrame类型,可直接调用
to_json(orient='records')方法,解决数组无对应方法的问题 - 用带步长的循环处理全量数据,自动覆盖不足一批的剩余数据,解决小数据量无法发送的问题
- 修正原有状态码判断逻辑:200为请求成功状态,原逻辑写反
- 优化URL参数拼接方式,用requests自带的params参数自动处理URL编码,避免特殊字符导致请求出错
- 修复原代码遍历DataFrame时实际拿到的是列名而非行数据的隐藏问题
修改后代码
import pandas as pd import requests def UploadData(root, self, data: pd.DataFrame): batch_size = 10 # 每批次发送10条,可根据实际需求调整大小 total_rows = len(data) # 逐批遍历全量数据 for start_idx in range(0, total_rows, batch_size): # 切分当前批次的DataFrame,超出索引范围时自动截止到最后一行 current_batch = data.iloc[start_idx: start_idx + batch_size] # 直接调用DataFrame的to_json方法 json_str = current_batch.to_json(orient='records') # 构造请求参数 req_params = { "tok": '{"tok":"YOUR TOKEN HERE","cmd":{"STORE":"test_database","VALUE":' + json_str + '}}' } url = 'https://newsimland.com/~db/JSON/' # 发送请求,自动处理参数编码 resp = requests.get(url, params=req_params) # 单批次错误提示,可按需调整为终止发送或跳过继续 if resp.status_code != 200: Alert(title="错误", text=f"第{start_idx//batch_size + 1}批次数据上传失败") # 全量数据处理完成提示 Alert(title="成功", text="所有数据上传完成")
内容的提问来源于stack exchange,提问作者de19
相关产品推荐
相关产品推荐

