当前位置: 首页 > news >正文

Pandas - JSON格式数据操作实践

作者:唐叔在学习
专栏:唐叔学python

大家好,我是唐叔!今天咱们来聊聊Pandas这个数据分析利器在处理JSON数据时的妙用。JSON作为一种轻量级的数据交换格式,在Web开发和数据分析中无处不在。掌握Pandas与JSON的互转技巧,能让你在数据处理时事半功倍!

文章目录

    • 一、Pandas读取JSON数据
      • 1. 从本地文件读取JSON
      • 2. 从HTTP请求读取JSON数据
    • 二、将Pandas数据转换为JSON
      • 1. 基本转换方法
      • 2. 不同格式的JSON输出
      • 3. 处理中文编码问题
    • 三、实战案例:获取豆瓣电影Top50
    • 四、常见问题解答
    • 五、总结

一、Pandas读取JSON数据

1. 从本地文件读取JSON

首先,咱们看看如何从本地文件读取JSON数据。Pandas提供了read_json()函数,使用起来非常简单:

import pandas as pd# 从本地文件读取JSON
df = pd.read_json('data.json')  # 假设有一个data.json文件
print(df.head())

在这里插入图片描述

2. 从HTTP请求读取JSON数据

实际工作中,我们更多会遇到从API接口获取JSON数据的情况。这时候需要结合requests库来获取数据:

import pandas as pd
import requests# 发送HTTP GET请求获取JSON数据
response = requests.get('https://api.example.com/data')
data = response.json()  # 将响应转换为Python字典# 将字典转换为DataFrame
df = pd.DataFrame(data)
print(df.head())

如果JSON数据结构比较复杂,比如嵌套了多层,可以使用json_normalize()函数来展平:

from pandas import json_normalize# 假设获取的JSON数据有嵌套结构
complex_data = {"total": 2,"users": [{"name": "张三","age": 25,"address": {"city": "北京","street": "朝阳区"}},{"name": "李四","age": 30,"address": {"city": "上海","street": "浦东新区"}}]
}# 展平嵌套的JSON结构
df = json_normalize(complex_data, 'users', meta=['total'])
print(df)

在这里插入图片描述

二、将Pandas数据转换为JSON

1. 基本转换方法

把DataFrame转换为JSON同样简单,使用to_json()方法即可:

# 创建一个示例DataFrame
data = {'姓名': ['张三', '李四', '王五'],'年龄': [25, 30, 35],'城市': ['北京', '上海', '广州']
}
df = pd.DataFrame(data)# 转换为JSON字符串
json_str = df.to_json()
print(json_str)# 转换为JSON文件
df.to_json('output.json', orient='records', force_ascii=False)

在这里插入图片描述

2. 不同格式的JSON输出

Pandas提供了多种JSON输出格式,通过orient参数控制:

# 按记录输出(最常用的格式)
print(df.to_json(orient='records'))# 按索引输出
print(df.to_json(orient='index'))# 按列输出
print(df.to_json(orient='columns'))# 按值输出
print(df.to_json(orient='values'))

3. 处理中文编码问题

默认情况下,中文会被转换为Unicode编码。如果想保留原始中文,可以设置force_ascii=False

print(df.to_json(orient='records', force_ascii=False))

PS:验证了使用PyCharm的控制台打印没效果,但是输出文件是可以做到保留原始中文的。

三、实战案例:获取豆瓣电影Top50

豆瓣提供了公开的API接口(需要申请API key),但为了演示,我们先使用简单的网页版接口:

import pandas as pd
import requests
from bs4 import BeautifulSoup# 获取豆瓣电影Top50
def get_douban_movies():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36'}movies = []# 获取前2页数据for i in range(0, 2):url = f'https://movie.douban.com/top250?start={i}'response = requests.get(url, headers=headers)soup = BeautifulSoup(response.text, 'html.parser')for item in soup.find_all('div', class_='item'):title = item.find('span', class_='title').textrating = item.find('span', class_='rating_num').texteval_num = item.find('div', class_='bd').find_all('span')[-2].text.replace('人评价', '')movies.append({'title': title,'rating': rating,'eval_num': eval_num})return movies# 获取数据
movies_data = get_douban_movies()
df = pd.DataFrame(movies_data)
print(df)

在这里插入图片描述

四、常见问题解答

Q1:为什么我的JSON数据读取后格式不对?

A:JSON数据结构千变万化,建议先用print(data)查看原始结构,再决定如何转换。复杂的嵌套结构可能需要json_normalize来处理。

Q2:如何只转换DataFrame的某几列为JSON?

A:可以先选择需要的列,再转换:

df[['姓名', '年龄']].to_json()

Q3:处理大型JSON文件时内存不足怎么办?

A:可以尝试:

  1. 使用chunksize参数分块读取
  2. 使用ijson库流式处理大型JSON文件

五、总结

今天唐叔带大家学习了:

  1. 使用read_json()读取本地JSON文件
  2. 结合requests获取HTTP接口的JSON数据
  3. 使用json_normalize处理复杂嵌套结构
  4. 使用to_json()将DataFrame转换为JSON
  5. 处理中文编码问题
  6. 一个完整的天气数据分析案例

记住,数据处理的关键在于理解数据结构。拿到JSON数据后,先打印出来看看结构,再决定如何处理。

好了,今天的分享就到这里。如果你觉得有用,别忘了点赞、收藏、关注三连!有什么问题欢迎在评论区留言,唐叔会一一解答。


唐叔小贴士:JSON数据格式虽然灵活,但缺乏严格的结构定义。在实际项目中,建议使用JSON Schema来定义数据格式,这样可以减少很多数据处理时的麻烦。

往期Python文章推荐

  • Pandas - Python爬虫数据处理分析神器
  • BeautifulSoup高级教程:数据抓取、性能调优、反爬策略,全方位提升爬虫技能!
http://www.dtcms.com/a/290573.html

相关文章:

  • iOS —— 3Gshare项目总结与思考
  • 【网络安全】DDOS攻击
  • Python Matplotlib中的fontdict参数说明
  • 学习日志7.21
  • 【HarmonyOS】ArkUI - 声明式开发范式
  • 产品剖析之AI创作与协作的未来革新者Flowith
  • 【编程语言】C、C++、C#深度对比:三种语言的演进历程与应用场景
  • zabbix企业级分布式监控环境部署
  • Django关于ListView通用视图的理解(Cursor解释)
  • 牛客周赛 Round 101题解
  • 北京-4年功能测试2年空窗-报培训班学测开-第五十六天
  • 阶段1--Linux中的网络配置
  • rt-thread多线程消息队列通信
  • 【SAP-CO】成本控制范围
  • 清理磁盘空间
  • 4 种更新的方法将消息从安卓传输到 Mac
  • JavaEE初阶第十期:解锁多线程,从 “单车道” 到 “高速公路” 的编程升级(八)
  • 用 Three.js 实现 PlayCanvas 风格 PBR 材质教程(第二篇):核心参数与光照模型
  • CS课程项目设计4:支持AI人机对战的五子棋游戏
  • RustDesk自建服务器完整部署指南:从零开始到成功连接。成功解决rustdesk报错:未就绪,请检查网络连接
  • Linux的系统调用机制总结
  • [Python] -项目实战10- 用 Python 自动化批量重命名文件
  • 重学前端008 --- CSS 无障碍 Quiz
  • 《高并发优化方案一》:本地锁 + 分布式锁实战详解
  • Excel函数 —— TEXTJOIN 文本连接
  • 支持不限制大小,大文件分段批量上传功能(不受nginx /apache 上传大小限制)
  • Apache Ignite Closure 和 Thread Pool
  • Ubuntu安装k8s集群入门实践-v1.31
  • WinForm-免费,可商用的WinForm UI框架推荐
  • 类似腾讯会议的私有化音视频会议软件,BeeWorks Meet