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

Pandas行转列与列装行

实际上,两种操作的核心代码确实非常相似,因为它们都涉及到将 JSON 数据解析并进行拆分。主要的区别在于操作的顺序和处理的对象:

  1. 一列转多列:
    • 首先,我们将 JSON 数据列中的每个 JSON 对象解析为 Python 字典(使用 json.loads())。
    • 然后,我们使用 pd.json_normalize() 函数将解析后的字典列表展开为多列,并与原始 DataFrame 进行连接。
  1. 一行转多行:
    • 首先,我们使用 explode() 方法将 JSON 数据列中的每个 JSON 数组展开为多行,并重置索引。
    • 然后,我们将重置索引后的 DataFrame 中的每行的 JSON 数据解析为 Python 字典(使用 json.loads())。
    • 最后,我们再次使用 pd.json_normalize() 函数将解析后的字典列表展开为多列,并与原始 DataFrame 进行连接。

所以,尽管代码实现上看起来非常相似,但是操作的顺序和处理的对象是有区别的。在一列转多列的情况下,我们是将每个 JSON 对象中的键值对转换为多列;而在一行转多行的情况下,我们是将每个 JSON 数组中的元素转换为多行,然后再将每行的 JSON 数据拆分为多列。

行转列

import pandas as pd
import json
from pandas import json_normalize

# 创建示例 DataFrame
data = {
    "id": [1, 2, 3],
    "json_array_column": [
        '[{"name": "Alice", "age": 30, "is_active": true}, {"name": "Bob", "age": 40, "is_active": false}]',
        '[{"name": "Charlie", "age": 35, "is_active": true}, {"name": "David", "age": 45, "is_active": false}]',
        '[{"name": "Eve", "age": 25, "is_active": true}]'
    ]
}

df = pd.DataFrame(data)

# 将 JSON 数组列压平为多行
df = df.explode("json_array_column").reset_index(drop=True)

# 使用 json.loads() 解析 JSON 字符串
df["json_array_column"] = df["json_array_column"].apply(json.loads)

# 使用 json_normalize() 函数将 JSON 数据压平为多列
df = pd.concat([df.drop(columns=["json_array_column"]), json_normalize(df["json_array_column"])], axis=1)

# 打印处理后的 DataFrame

df

列转行

import pandas as pd
from pandas import json_normalize
import json

# 创建示例 DataFrame
data = {
    "id": [1, 2, 3],
    "json_array_column": [
        '[{"name": "Alice", "age": 30, "is_active": true}, {"name": "Bob", "age": 40, "is_active": false}]',
        '[{"name": "Charlie", "age": 35, "is_active": true}, {"name": "David", "age": 45, "is_active": false}]',
        '[{"name": "Eve", "age": 25, "is_active": true}]'
    ]
}

df = pd.DataFrame(data)

# 使用 apply + json.loads + explode 实现一行变多行
df = df.assign(json_array_column=df['json_array_column'].apply(json.loads)).explode('json_array_column')

# 重置索引
df.reset_index(drop=True, inplace=True)

# 打印处理后的 DataFrame
print(df)

json array数据展开

import pandas as pd
from pandas import json_normalize
import json

# 创建示例 DataFrame
data = {
    "id": [1, 2, 3],
    "json_array_column": [
        '[{"name": "Alice", "age": 30, "is_active": true}, {"name": "Bob", "age": 40, "is_active": false}]',
        '[{"name": "Charlie", "age": 35, "is_active": true}, {"name": "David", "age": 45, "is_active": false}]',
        '[{"name": "Eve", "age": 25, "is_active": true}]'
    ]
}

df = pd.DataFrame(data)

# 使用 apply + json.loads + explode 实现一行变多行
df = df.assign(json_array_column=df['json_array_column'].apply(json.loads)).explode('json_array_column').reset_index(drop=True)

# 使用 json_normalize() 函数将 JSON 数据的键值对作为列
df = pd.concat([df.drop(columns=["json_array_column"]), json_normalize(df['json_array_column'])], axis=1)

# 重置索引
df.reset_index(drop=True, inplace=True)

# 打印处理后的 DataFrame
df

http://www.kler.cn/a/369736.html

相关文章:

  • 百度热力图数据获取,原理,处理及论文应用5
  • C语言连接Mysql
  • WordPress event-monster插件存在信息泄露漏洞(CVE-2024-11396)
  • 高级编码参数
  • docker 学习笔记
  • HTML5+SVG+CSS3实现雪中点亮的圣诞树动画效果源码
  • 本地docker部署中间件和应用
  • 使用 v-html 指令渲染的标签, 标签内绑定的 click 事件不生效
  • Linux开放端口问题(同一局域网)
  • Django入门教程——动态表格分页展示数据
  • 指令(一):Android OS实用指令
  • 【入驻电商平台指南】ISV入驻京东平台申请流程
  • Redis内部数据结构Dict结构详解
  • 关于写“查看IT设备详细信息”接口的理解
  • PostgresSql 常用运维命令
  • 【大数据学习 | Zookeeper】Zookeeper的选举机制
  • 《使用Gin框架构建分布式应用》阅读笔记:p212-p233
  • 解锁AI潜力:揭秘高效人工智能数据准备的奥秘
  • 使用Claude新功能分析数据文件
  • 如何对网络设备进行监控:以监控易平台为例
  • 1FreeRTOS学习(队列、二值信号量、计数型信号量之间的相同点和不同点)
  • 前端实现卡片,展开/收起效果(vue/React/html)
  • 从零开始基于ROS-Noetic使用gazebo操控真实机械臂(附完整运行代码)
  • 论文笔记:TELLER 可解释的、可概括的、可控的假新闻检测的可信框架
  • <项目代码>YOLOv8 煤矸石识别<目标检测>
  • 在 macOS 上添加 hosts 文件解析的步骤