软件测试|数据处理神器pandas教程(五)

简介: 软件测试|数据处理神器pandas教程(五)

在这里插入图片描述

前言

上一篇文章我们介绍了pandas读写CSV文件的有关方法,本篇文章我们介绍pandas读取JSON文件的方法。pandas同样可以很方便地处理JSON文件。

关于json

JSON(JavaScript Object Notation,JavaScript 对象表示法),是存储和交换文本信息的语法,类似 XML,但是JSON 比 XML 更小、更快,更易解析。

数据准备

我们根据部分省份2022年的经济社会发展数据创建了一个名为data.json文件,文件内容如下:

[
  {
    "省份": "广东",
    "人口": 12684,
    "地区": "中南",
    "GDP": 129118.58
  },
  {
    "省份": "江苏",
    "人口": 8505.4,
    "地区": "华东",
    "GDP": 122875.6
  },
  {
    "省份": "山东",
    "人口": 10169.99,
    "地区": "华东",
    "GDP": 87435
  },
  {
    "省份": "浙江",
    "人口": 6540,
    "地区": "华东",
    "GDP": 77715
  },
  {
    "省份": "河南",
    "人口": 9883,
    "地区": "中南",
    "GDP": 61345.05
  },
  {
    "省份": "四川",
    "人口": 8372,
    "地区": "西南",
    "GDP": 56749.8
  },
  {
    "省份": "湖北",
    "人口": 5844,
    "地区": "中南",
    "GDP": 53734.92
  },
  {
    "省份": "福建",
    "人口": 4188,
    "地区": "华东",
    "GDP": 53109.85
  },
  {
    "省份": "湖南",
    "人口": 6604,
    "地区": "中南",
    "GDP": 48670.37
  },
  {
    "省份": "安徽",
    "人口": 6127,
    "地区": "华东",
    "GDP": 45045
  },
  {
    "省份": "上海",
    "人口": 2489.43,
    "地区": "华东",
    "GDP": 44652.8
  },
  {
    "省份": "河北",
    "人口": 7420,
    "地区": "华北",
    "GDP": 42370.4
  },
  {
    "省份": "北京",
    "人口": 2188.6,
    "地区": "华北",
    "GDP": 41610.9
  },
  {
    "省份": "陕西",
    "人口": 3954,
    "地区": "西北",
    "GDP": 32772.68
  },
  {
    "省份": "江西",
    "人口": 4517.4,
    "地区": "华东",
    "GDP": 32074.7
  }
]

pandas读取json文件

与读取csv文件类似,pandas提供了read_json()方法读取json文件内容,示例如下:

import pandas as pd

df = pd.read_json('data.json')
print(df.to_string())

----------------------------
输出结果如下:
    省份        人口  地区        GDP
0   广东  12684.00  中南  129118.58
1   江苏   8505.40  华东  122875.60
2   山东  10169.99  华东   87435.00
3   浙江   6540.00  华东   77715.00
4   河南   9883.00  中南   61345.05
5   四川   8372.00  西南   56749.80
6   湖北   5844.00  中南   53734.92
7   福建   4188.00  华东   53109.85
8   湖南   6604.00  中南   48670.37
9   安徽   6127.00  华东   45045.00
10  上海   2489.43  华东   44652.80
11  河北   7420.00  华北   42370.40
12  北京   2188.60  华北   41610.90
13  陕西   3954.00  西北   32772.68
14  江西   4517.40  华东   32074.70

和读取csv文件相似,我们加上to_string()即可返回DataFrame。

除了处理json文件,同样也可以读取json字符串,示例如下:

import pandas as pd

data = [
  {
    "省份": "广东",
    "人口": 12684,
    "地区": "中南",
    "GDP": 129118.58
  },
  {
    "省份": "江苏",
    "人口": 8505.4,
    "地区": "华东",
    "GDP": 122875.6
  },
  {
    "省份": "山东",
    "人口": 10169.99,
    "地区": "华东",
    "GDP": 87435
  },
  {
    "省份": "浙江",
    "人口": 6540,
    "地区": "华东",
    "GDP": 77715
  },
  {
    "省份": "河南",
    "人口": 9883,
    "地区": "中南",
    "GDP": 61345.05
  },
  {
    "省份": "四川",
    "人口": 8372,
    "地区": "西南",
    "GDP": 56749.8
  },
  {
    "省份": "湖北",
    "人口": 5844,
    "地区": "中南",
    "GDP": 53734.92
  },
  {
    "省份": "福建",
    "人口": 4188,
    "地区": "华东",
    "GDP": 53109.85
  },
  {
    "省份": "湖南",
    "人口": 6604,
    "地区": "中南",
    "GDP": 48670.37
  },
  {
    "省份": "安徽",
    "人口": 6127,
    "地区": "华东",
    "GDP": 45045
  },
  {
    "省份": "上海",
    "人口": 2489.43,
    "地区": "华东",
    "GDP": 44652.8
  },
  {
    "省份": "河北",
    "人口": 7420,
    "地区": "华北",
    "GDP": 42370.4
  },
  {
    "省份": "北京",
    "人口": 2188.6,
    "地区": "华北",
    "GDP": 41610.9
  },
  {
    "省份": "陕西",
    "人口": 3954,
    "地区": "西北",
    "GDP": 32772.68
  },
  {
    "省份": "江西",
    "人口": 4517.4,
    "地区": "华东",
    "GDP": 32074.7
  }
]
df = pd.DataFrame(data)

print(df)

--------------------------
输出结果如下:
    省份        人口  地区        GDP
0   广东  12684.00  中南  129118.58
1   江苏   8505.40  华东  122875.60
2   山东  10169.99  华东   87435.00
3   浙江   6540.00  华东   77715.00
4   河南   9883.00  中南   61345.05
5   四川   8372.00  西南   56749.80
6   湖北   5844.00  中南   53734.92
7   福建   4188.00  华东   53109.85
8   湖南   6604.00  中南   48670.37
9   安徽   6127.00  华东   45045.00
10  上海   2489.43  华东   44652.80
11  河北   7420.00  华北   42370.40
12  北京   2188.60  华北   41610.90
13  陕西   3954.00  西北   32772.68
14  江西   4517.40  华东   32074.70

注:我们也可以从url中读取json

pandas读取内嵌json数据

很多时候,我们获取到的json数据并不是直接被我们读取成我们想要的DataFrame,示例如下:

import pandas as pd

data ={
  "conuntry": "中国",
  "year": 2022,
  "provice":[{
    "省份": "广东",
    "人口": 12684,
    "地区": "中南",
    "GDP": 129118.58
  },
  {
    "省份": "江苏",
    "人口": 8505.4,
    "地区": "华东",
    "GDP": 122875.6
  },
  {
    "省份": "山东",
    "人口": 10169.99,
    "地区": "华东",
    "GDP": 87435
  },
  {
    "省份": "浙江",
    "人口": 6540,
    "地区": "华东",
    "GDP": 77715
  },
  {
    "省份": "河南",
    "人口": 9883,
    "地区": "中南",
    "GDP": 61345.05
  },
  {
    "省份": "四川",
    "人口": 8372,
    "地区": "西南",
    "GDP": 56749.8
  },
  {
    "省份": "湖北",
    "人口": 5844,
    "地区": "中南",
    "GDP": 53734.92
  },
  {
    "省份": "福建",
    "人口": 4188,
    "地区": "华东",
    "GDP": 53109.85
  },
  {
    "省份": "湖南",
    "人口": 6604,
    "地区": "中南",
    "GDP": 48670.37
  },
  {
    "省份": "安徽",
    "人口": 6127,
    "地区": "华东",
    "GDP": 45045
  },
  {
    "省份": "上海",
    "人口": 2489.43,
    "地区": "华东",
    "GDP": 44652.8
  },
  {
    "省份": "河北",
    "人口": 7420,
    "地区": "华北",
    "GDP": 42370.4
  },
  {
    "省份": "北京",
    "人口": 2188.6,
    "地区": "华北",
    "GDP": 41610.9
  },
  {
    "省份": "陕西",
    "人口": 3954,
    "地区": "西北",
    "GDP": 32772.68
  },
  {
    "省份": "江西",
    "人口": 4517.4,
    "地区": "华东",
    "GDP": 32074.7
  }
]}
df = pd.DataFrame(data)

print(df)

输出结果如下图:

在这里插入图片描述
输出的DataFrame很显然不符合我们的要求,我们想要读到的是每一个省份的数据,那我们应该怎么办呢,pandas提供了一个json_normalize() 帮助我们将内嵌的数据完整的解析出来,以下是我们的代码示例:

import pandas as pd

data ={
  "conuntry": "中国",
  "year": 2022,
  "provice":[{
    "省份": "广东",
    "人口": 12684,
    "地区": "中南",
    "GDP": 129118.58
  },
  {
    "省份": "江苏",
    "人口": 8505.4,
    "地区": "华东",
    "GDP": 122875.6
  },
  {
    "省份": "山东",
    "人口": 10169.99,
    "地区": "华东",
    "GDP": 87435
  },
  {
    "省份": "浙江",
    "人口": 6540,
    "地区": "华东",
    "GDP": 77715
  },
  {
    "省份": "河南",
    "人口": 9883,
    "地区": "中南",
    "GDP": 61345.05
  },
  {
    "省份": "四川",
    "人口": 8372,
    "地区": "西南",
    "GDP": 56749.8
  },
  {
    "省份": "湖北",
    "人口": 5844,
    "地区": "中南",
    "GDP": 53734.92
  },
  {
    "省份": "福建",
    "人口": 4188,
    "地区": "华东",
    "GDP": 53109.85
  },
  {
    "省份": "湖南",
    "人口": 6604,
    "地区": "中南",
    "GDP": 48670.37
  },
  {
    "省份": "安徽",
    "人口": 6127,
    "地区": "华东",
    "GDP": 45045
  },
  {
    "省份": "上海",
    "人口": 2489.43,
    "地区": "华东",
    "GDP": 44652.8
  },
  {
    "省份": "河北",
    "人口": 7420,
    "地区": "华北",
    "GDP": 42370.4
  },
  {
    "省份": "北京",
    "人口": 2188.6,
    "地区": "华北",
    "GDP": 41610.9
  },
  {
    "省份": "陕西",
    "人口": 3954,
    "地区": "西北",
    "GDP": 32772.68
  },
  {
    "省份": "江西",
    "人口": 4517.4,
    "地区": "华东",
    "GDP": 32074.7
  }
]}

df = pd.json_normalize(data, record_path=['provice'])
print(df)
------------------------------
输出结果如下:
    省份        人口  地区        GDP
0   广东  12684.00  中南  129118.58
1   江苏   8505.40  华东  122875.60
2   山东  10169.99  华东   87435.00
3   浙江   6540.00  华东   77715.00
4   河南   9883.00  中南   61345.05
5   四川   8372.00  西南   56749.80
6   湖北   5844.00  中南   53734.92
7   福建   4188.00  华东   53109.85
8   湖南   6604.00  中南   48670.37
9   安徽   6127.00  华东   45045.00
10  上海   2489.43  华东   44652.80
11  河北   7420.00  华北   42370.40
12  北京   2188.60  华北   41610.90
13  陕西   3954.00  西北   32772.68
14  江西   4517.40  华东   32074.70

当然,数据可能会更加复杂一些,我们仍然可以读到我们想要的数据,示例数据如下:

{
    "club_name": "拜仁慕尼黑",
    "season": "2022-2023",
    "info": {
      "coach": "纳格尔斯曼",
      "主场": "慕尼黑安联球场",
      "赞助商": {
        "球衣": "阿迪达斯",
        "胸前广告": "德国电信"
      }
    },
    "player": [
    {
        "number": 25,
        "name": "Muller",
        "位置": "前腰",
        "进球": 20,
        "助攻": 21
    },
    {
        "number": 10,
        "name": "萨内",
        "位置": "前锋",
        "进球": 21,
        "助攻": 10
    },
    {
        "number": 6,
        "name": "基米希",
        "位置": "中场",
        "进球": 6,
        "助攻": 12
    }]
}

代码如下:

import pandas as pd
import json

with open('data2.json', encoding='utf-8') as f:
    data = json.loads(f.read())


df = pd.json_normalize(
    data,
    record_path=['player'],
    meta = [
        'season',
        ['info', 'coach'],
        ['info', '主场']
    ]
)

print(df)
------------------------------------
输出结果如下:
   number name  位置  进球  助攻     season info.coach  info.主场
0      25   穆勒  前腰  20  21  2022-2023      纳格尔斯曼  慕尼黑安联球场
1      10   萨内  前锋  21  10  2022-2023      纳格尔斯曼  慕尼黑安联球场
2       6  基米希  中场   6  12  2022-2023      纳格尔斯曼  慕尼黑安联球场

总结

本文主要介绍了pandas读取json数据的方法,除了直接读取json数据外,还可以读取嵌套的json数据,后续我们将介绍pandas处理Excel数据的方法。

相关文章
|
18天前
|
人工智能 数据可视化 测试技术
Postman 性能测试教程:快速上手 API 压测
本文介绍API上线后因高频调用导致服务器告警,通过Postman与Apifox进行压力测试排查性能瓶颈。对比两款工具在批量请求、断言验证、可视化报告等方面的优劣,探讨API性能优化策略及行业未来发展方向。
Postman 性能测试教程:快速上手 API 压测
|
3月前
|
JSON JavaScript 测试技术
用Postman玩转电商API:一键测试+自动化请求教程
Postman 是电商 API 测试的高效工具,涵盖基础配置、自动化测试、环境管理与请求自动化,助你快速提升开发效率。
|
2月前
|
前端开发 Java jenkins
Jmeter压力测试工具全面教程和使用技巧。
JMeter是一个能够模拟高并发请求以检查应用程序各方面性能的工具,包括但不限于前端页面、后端服务及数据库系统。熟练使用JMeter不仅能够帮助发现性能瓶颈,还能在软件开发早期就预测系统在面对真实用户压力时的表现,确保软件质量和用户体验。在上述介绍的基础上,建议读者结合官方文档和社区最佳实践,持续深入学习和应用。
534 10
|
1月前
|
监控 测试技术 API
n8n自动化测试教程 (1):环境搭建与初识n8n
n8n是一款开源、可视化的工作流自动化工具,测试工程师可通过拖拽节点快速构建API测试流程,实现测试编排、数据管理、自动化监控与告警等功能,提升测试效率与覆盖率。
|
2月前
|
JSON 安全 测试技术
什么是API接口测试?这可能是全网最全的教程了!
API 是应用程序间的“中间人”,用于实现通信和数据交换。随着微服务架构的普及,API 数量激增,其质量对系统稳定性至关重要。API 测试可验证功能、性能与安全性,帮助开发者在部署前发现并修复问题,提升系统可靠性。测试内容包括请求方法、URL、请求头、请求体、响应状态码与响应数据等。常用工具如 Postman、AREX 可辅助测试,确保 API 在不同场景下的正确性与稳定性。
|
8月前
|
缓存 数据可视化 BI
Pandas高级数据处理:数据仪表板制作
在数据分析中,面对庞大、多维度的数据集(如销售记录、用户行为日志),直接查看原始数据难以快速抓住重点。传统展示方式(如Excel表格)缺乏交互性和动态性,影响决策效率。为此,我们利用Python的Pandas库构建数据仪表板,具备数据聚合筛选、可视化图表生成和性能优化功能,帮助业务人员直观分析不同品类商品销量分布、省份销售额排名及日均订单量变化趋势,提升数据洞察力与决策效率。
137 12
|
8月前
|
数据可视化 数据挖掘 数据处理
Pandas高级数据处理:数据可视化进阶
Pandas是数据分析的强大工具,能高效处理数据并与Matplotlib、Seaborn等库集成,实现数据可视化。本文介绍Pandas在绘制基础图表(如折线图)和进阶图表(如分组柱状图、热力图)时的常见问题及解决方案,涵盖数据准备、报错处理、图表优化等内容,并通过代码案例详细解释,帮助读者掌握数据可视化的技巧。
159 13
|
8月前
|
数据采集 SQL 数据可视化
Pandas高级数据处理:交互式数据探索
Pandas是Python中流行的数据分析库,提供丰富的数据结构和函数,简化数据操作。本文从基础到高级介绍Pandas的使用,涵盖安装、读取CSV/Excel文件、数据查看与清洗、类型转换、条件筛选、分组聚合及可视化等内容。掌握这些技能,能高效进行交互式数据探索和预处理。
95 6
|
8月前
|
数据采集 存储 数据可视化
Pandas高级数据处理:数据报告生成
Pandas 是数据分析领域不可或缺的工具,支持多种文件格式的数据读取与写入、数据清洗、筛选与过滤。本文从基础到高级,介绍如何使用 Pandas 进行数据处理,并解决常见问题和报错,如数据类型不一致、时间格式解析错误、内存不足等。最后,通过数据汇总、可视化和报告导出,生成专业的数据报告,帮助你在实际工作中更加高效地处理数据。
204 8
|
8月前
|
存储 数据挖掘 数据处理
Pandas高级数据处理:数据安全与隐私保护
在数字化时代,数据安全与隐私保护至关重要。本文介绍使用Pandas进行数据分析时常见的安全问题及解决方案,包括数据泄露风险、权限报错、数据类型转换错误等,并结合代码案例详细讲解如何避免和解决这些问题。同时,探讨高级策略如访问控制、匿名化、差分隐私及加密传输存储,确保数据分析合法合规。
193 7