如何遍历pandas DataFrame每行生成对应API请求的JSON payload?
Pandas逐行构造对齐JSON payload的解决方案
错误原因
你使用的两层嵌套循环会让每一个Date列的取值和所有Hours列的取值配对,最终生成两列的笛卡尔积,无法实现行对齐的取值逻辑。
实现方案
方案1:逐行遍历(iterrows,易读性最高)
直接遍历DataFrame的每一行,从行数据中按需取对应字段构造payload:
for _, row in df.iterrows(): payload = { "day": row["Date"], "shopCapacity": int(row["Hours"]) # 示例中Hours为字符串类型,按需转为整数符合预期格式 } print(payload)
方案2:同步遍历两列(zip,性能更高)
如果仅需要取固定两列的值,可以用zip()将两列打包同步遍历,避免全量读取行数据:
for date, hours in zip(df["Date"], df["Hours"]): payload = { "day": date, "shopCapacity": int(hours) } print(payload)
方案3:批量生成所有payload(pandas内置方法,代码最简洁)
如果不需要逐行处理额外逻辑,直接重命名列名后调用to_dict方法即可一步得到所有payload的列表:
payload_list = df.rename(columns={"Date": "day", "Hours": "shopCapacity"})\ .astype({"shopCapacity": int})\ .to_dict("records") # 遍历列表即可得到单个payload for payload in payload_list: print(payload)
以上三种方案的输出均为你需要的行对齐结果:
{'day': '2021-09-01', 'shopCapacity': 88} {'day': '2021-09-02', 'shopCapacity': 55}
内容的提问来源于stack exchange,提问作者James Cook
相关产品推荐
相关产品推荐

