合理利用pandas来简化大量请求数据组装工作

工作场景

本次我们开发了一个新功能,为了验证它是否合理,我们需要从线上导出一批真实的用户数据来进行模拟请求,以此来验证功能的完整性。

例如一个很简单的功能,我们是一个对学生成绩进行数据分析的系统,各学校会将学生成绩作为原始数据导入并保存在我们的后台管理系统。我们新增了一个在导入过程中通过某些学科成绩计算指标的功能(功能不做具体解析)。

导出文件格式

假设我们从后台导出的csv文件格式如下:在这里插入图片描述

studentID;studentName;gender;dateOfBirth;class;subject;score;teacherId;teacherName;enteredBy
1;Alice;F;1999-03-15;10A;数学;88;T001;张老师;刘主任
2;Bob;M;2000-08-20;10B;英语;92;T002;李老师;刘主任
3;Charlie;M;2001-02-05;10A;物理;76;T003;王老师;刘主任
4;David;F;2000-11-10;10C;化学;85;T002;李老师;刘主任
5;Eva;F;1999-07-18;10B;数学;90;T001;张老师;刘主任
6;Frank;M;2001-04-25;10C;英语;82;T003;王老师;刘主任
7;Grace;F;2000-05-30;10A;物理;78;T001;张老师;刘主任
8;Henry;M;2001-10-12;10B;化学;95;T002;李老师;刘主任
9;Isabella;F;2000-01-20;10C;数学;88;T003;王老师;刘主任
10;Jack;M;2001-06-28;10A;英语;94;T001;张老师;刘主任
11;Lily;F;2002-03-05;10D;生物;85;T004;赵老师;钟主任
12;Michael;M;2002-07-15;10E;地理;90;T005;王主任;王主任
13;Olivia;F;2002-11-20;10F;历史;75;T006;赵老师;钟主任
14;Peter;M;2003-02-10;10G;音乐;80;T007;王主任;王主任
15;Quincy;F;2003-05-25;10H;美术;92;T008;赵老师;钟主任
16;Robert;M;2003-09-12;10I;体育;88;T009;王主任;王主任
17;Sophia;F;2004-01-18;10J;计算机;76;T010;赵老师;钟主任
18;Thomas;M;2004-04-25;10K;数学;95;T011;王主任;王主任
19;Uma;F;2004-08-10;10L;物理;82;T012;赵老师;钟主任
20;Vincent;M;2005-01-20;10M;化学;94;T013;王主任;王主任
接口请求格式

假设我们接口的请求格式如下:

{"enteredBy": "刘主任","studentScoreDetails":[{"studentID": 1,"studentName": "Alice","dateOfBirth": "1999-03-15","score": 88,"gender": "F","subject": "数学","class": "10A","teacherName": "张老师"}]
}

解决方案

注意我们这里需要大量数据来验证,所以请放弃一个一个自己组装的想法,要合理运用工具

  1. 首先我们先观察我们的csv文件格式,是用;分隔的,且一行有10条数据,所以我们在读取数据时,还需要过滤无效数据
# 读取 CSV 文件
csv_file = 'studentScore.csv'  # 替换为你的文件路径# 初始化一个空列表来保存有效的数据行
valid_lines = []# 打开文件,跳过第一行列名读取并处理数据
with open(csv_file, 'r', encoding='utf-8') as file:for i, line in enumerate(file):if i == 0:  # 跳过第一行,即列名行continueline = line.strip()# 按分号分割行数据parts = line.split(';')# 如果数据行有 10 个字段,即有效行,保存到列表中if len(parts) == 10:valid_lines.append(parts)
  1. 导入pandas库,将已经处理好的数据列表(valid_lines)转换为Pandas的DataFrame对象,valid_lines列表中的每个元素(也就是每个列表)都将作为DataFrame的一行。–DataFrame是Pandas库中用于存储和操作表格数据的主要数据结构,它类似于一个二维的、大小可变的、有标签的数据结构,可以容纳许多不同类型的数据。
# 创建 DataFrame
data = pd.DataFrame(valid_lines, columns=['studentID', 'studentName', 'gender', 'dateOfBirth', 'class','subject', 'score', 'teacherId', 'teacherName', 'enteredBy'])
  1. 过滤掉我们不需要的列,并处理一部分列,比如teacherId
# 选择所需的列
selected_columns = ['studentID', 'studentName', 'gender', 'dateOfBirth', 'class','subject', 'score', 'teacherName', 'enteredBy']data = data[selected_columns]# 将日期字符串转换为日期对象
data['dateOfBirth'] = pd.to_datetime(data['dateOfBirth'], format='%Y-%m-%d', errors='coerce')
# 将Score转换为数字
data['score'] = pd.to_numeric(data['score'], errors='coerce')
  1. 按照成绩录入人进行分组
# 按照 成绩录入人 进行分组
grouped = data.groupby('enteredBy')

5.组装json文件

# 根据成绩录入人进行遍历,生成 JSON 数据并保存到文件
for enteredBy, group in grouped:studentScoreDetails = []for index, row in group.iterrows():studentScoreDetail = {"studentID": row['studentID'],"dateOfBirth": row['dateOfBirth'].strftime('%Y-%m-%d') if not pd.isnull(row['dateOfBirth']) else None,"studentName": row['studentName'],"score": float(row['score']),"gender": row['gender'],"subject": row['subject'],"class": row['class'],"teacherName": row['teacherName']}studentScoreDetails.append(studentScoreDetail)json_data = {"enteredBy": enteredBy,  # 使用处理后的 成绩录入人"studentScoreDetails": studentScoreDetails}

6.保存结果到文件

# 创建一个目录用户保存数据output_dir = 'student'folder_path = os.path.join(output_dir, f'{enteredBy}')  # 不同的录入人命名josn文件os.makedirs(folder_path, exist_ok=True)  # 创建输出目录和子目录,如果它们已经存在则不会引发错误# 保存 JSON 请求数据到对应录入人目录output_file = os.path.join(folder_path, f'{enteredBy}.json')with open(output_file, 'w', encoding='utf-8') as file:json.dump(json_data, file, indent=4, ensure_ascii=False)print(f"{enteredBy}录入数据保存成功")
  1. 运行代码,最终我们就能得到按不同录入人进行分组的请求文件数据
    在这里插入图片描述
    在这里插入图片描述

  2. 然后就可以用这些现成的请求数据直接调接口来验证我们的功能啦,是不是节省了我们很多时间,这里只是举了一个例子,处理方法都差不多,只是数据不一样,大家举一反三拿自己的业务练习练习吧,感谢观看。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/478158.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter的自动化测试实施方案(超详细)

🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 Jmeter是目前最流行的一种测试工具,基于此工…

OpenAI 发布文生视频大模型 Sora,AI 视频要变天了,视频创作重新洗牌!AGI 还远吗?

一、一觉醒来,AI 视频已变天 早上一觉醒来,群里和朋友圈又被刷屏了。 今年开年 AI 界最大的震撼事件:OpenAI 发布了他们的文生视频大模型 Sora。 OpenAI 文生视频大模型 Sora 的横空出世,预示着 AI 视频要变天了,视…

柚见(伙伴匹配系统)第六期

开发主页 开发主页(默认推荐和自己兴趣相当的用户)优化主页的性能(缓存 定时任务 分布式锁) 前端recommend 最简单:直接 list 列表 cv searchResult页面的代码 修改 后端接口 数据内容下边距修改 提取用户信息卡…

11. Springboot集成Dubbo3(二)示例demo

目录 1、前言 2、注册中心 3、快速开始 3.1、添加dubbo3依赖 3.2、dubbo3-api ​编辑 3.3、dubbo3-server 3.3.1、添加依赖 3.3.2、实现IUserService 3.3.3、添加配置文件application.properties 3.3.4、修改Application启动类 3.3.5、出错解决 3.4、dubbo3-porta…

Android widget基础指南

widget的概念最早是由一名叫Rose的苹果工程师提出,后来经过多方面机缘巧合的发展下,便有了今天Android平台上的小组件widget,一般APP开发可能应用场景较少,最常见的莫过于天气APP的widget。但对于从事IOT或车载方向的同学&#xf…

【机器学习笔记】13 降维

降维概述 维数灾难 维数灾难(Curse of Dimensionality):通常是指在涉及到向量的计算的问题中,随着维数的增加,计算量呈指数倍增长的一种现象。在很多机器学习问题中,训练集中的每条数据经常伴随着上千、甚至上万个特征。要处理这…

SpringMVC 的参数绑定之list集合、Map

标签中name属性的值就是pojo类的属性名 参数绑定4 list [对象] <form action"teaupd.do" method"post"> <c:forEach items"${list}" var"tea" varStatus "status"> 教师编号&#xff1a;<input…

微信小程序开发:appid和secret的获取方法

首先进入小程序官网 - 微信公众平台&#xff1a;https://mp.weixin.qq.com 在开发管理页即可查看 AppID。 AppSecret 需要点击生成&#xff0c;手机扫码后查看。 内容拓展&#xff1a; 当开发微信小程序时&#xff0c;了解和正确使用 AppID 和 AppSecret 是至关重要的。以…

更快找到远程/自由工作的网站

不要使用Fiver或Upwork。 它们已经饱和了。 下面是10个更快找到远程/自由工作的网站&#xff1a; 1. Toptal 这个网站专门为熟练的自由职业者提供远程工作机会&#xff0c;如Shopify和Priceline等一流公司。 他们只接受软件开发、设计和金融等领域的顶级3%自由职业者。 htt…

PyCharm 调试过程中控制台 (Console) 窗口内运行命令 - 实时获取中间状态

PyCharm 调试过程中控制台 [Console] 窗口内运行命令 - 实时获取中间状态 1. yongqiang.py2. Debugger -> Console3. Show Python PromptReferences 1. yongqiang.py #!/usr/bin/env python # -*- coding: utf-8 -*- # yongqiang chengfrom __future__ import absolute_imp…

计算机设计大赛 深度学习人体语义分割在弹幕防遮挡上的实现 - python

文章目录 1 前言1 课题背景2 技术原理和方法2.1基本原理2.2 技术选型和方法 3 实例分割4 实现效果5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习人体语义分割在弹幕防遮挡上的应用 该项目较为新颖&#xff0c;适合作为竞…

【软考问题】-- 10 - 知识精讲 - 项目风险管理

一、基本问题 1&#xff1a;按照可预测性&#xff0c;风险分哪三类&#xff1f; &#xff08;1&#xff09;已知风险&#xff1a;如项目目标不明确&#xff0c; 过分乐观的进度计划&#xff0c; 设计或施工变更和材料价格波动等。&#xff08;2&#xff09;可预测风险&#xff…