pandas保存dict字段再读取成DataFrame

ops/2024/10/19 9:32:26/

背景:

pandas DataFrame中有字段是dict类型,使用to_excel方法直接保存下次读取出来,dict字段会变成字符串,无法识别;

目标:保存dict字段,下次读出来还是dict

方法一:使用json.dums 和 json.loads

python">import pandas as pd
import jsondef save_excel(df, filename):with pd.ExcelWriter(filename, engine='xlsxwriter', engine_kwargs={'options':{'strings_to_urls': False, 'encoding':'utf-8-sig'}})\as writer:df.to_excel(excel_writer=writer, header=True, index=False, sheet_name='Sheet_name_1')# 创建一个包含 JSON 数据的 DataFrame
data = {'name': ['Alice', 'Bob'],'json_data': [{"key1": "value"}, {"key2": "value2"}]
}
df = pd.DataFrame(data)# 将字典字段转换为 JSON 字符串
df['json_data'] = df['json_data'].apply(lambda x: json.dumps(x, ensure_ascii=False))# 保存到 Excel
save_excel(df, 'data.xlsx')# 从 Excel 读取
df_read = pd.read_excel('data.xlsx')# 如果需要将 JSON 字符串转换回 Python 对象
df_read['json_data'] = df_read['json_data'].apply(json.loads)
print(df_read)print(type(df_read['json_data'].iloc[0]))

输出:

python">    name           json_data
0  Alice   {'key1': 'value'}
1    Bob  {'key2': 'value2'}
<class 'dict'>

要点:
保存到文件之前,需要

python">df['json_data'] = df['json_data'].apply(lambda x: json.dumps(x, ensure_ascii=False)

从文件读取后,需要

python">df_read['json_data'] = df_read['json_data'].apply(json.loads)

json.dumps是把python dict类型数据转成json格式的字符串,而json.loads是把json字符串转成python dict,Python的json.loads() 方法与json.dumps()方法。

方法二:保存成json再读成json:

python"># 保存
def save_json(df, outfile):json_str = df.to_json(orient='records', force_ascii=False)with open(outfile, 'w', encoding='utf-8') as f:f.write(json_str)
# 读取
def read_data(filepath, filename):with open('data.json', 'r', encoding='utf-8') as file:data = json.load(file)df = pd.DataFrame(data)return df
python">outfile = 'data2.json'
save_json(df, outfile)
df = read_data(outfile)
df['json_data'] = df['json_data'].apply(json.loads)
print(type(df['json_data'].iloc[0]))

以下两种读法可能会因json文件过大出错

python">df = pd.read_json(filename, orient='records')
python">def read_data(filepath, filename):# 设置每个块的大小,这里以10000行为例chunk_size = 10 ** 5  chunks = []for chunk in pd.read_json(filename, chunksize=chunk_size, lines=True):# 处理每个块的数据# 例如,可以在这里进行数据清洗或聚合操作chunks.append(chunk)df = pd.concat(chunks, ignore_index=True)return df

http://www.ppmy.cn/ops/15745.html

相关文章

网络编程——TCP的特性之自动重传/流量控制/拥塞控制,一篇说清楚

文章目录 1. ARQ自动重传协议1.1 停止等待ARQ1.2 连续ARQ1.3 总结 2. TCP的流量控制3. TCP的拥塞控制3.1 慢开始算法3.2 拥塞避免算法3.3 快重传算法3.4 快恢复算法 1. ARQ自动重传协议 自动重传请求&#xff08;Automatic Repeat-reQuest&#xff09;&#xff0c;通过使用确认…

DC学习笔记

视频 数字逻辑综合工具实践 DC 01_哔哩哔哩_bilibili 一、DC工作模式&#xff08;此小节为搬运内容&#xff09; 原链接&#xff1a;Design_Compiler User Guide 随手笔记&#xff08;9&#xff09;Using Floorplan Information - 知乎 DC拥有四种工作模式&#xff1a; 工…

(C++) share_ptr 之循环引用

文章目录 &#x1f6a9;前言&#x1f6a9;循环引用&#x1f579;️例子1Code&#x1f62d;shared_ptr &#xff08;错误&#xff09;&#x1f602;weak_ptr &#xff08;正确&#xff09;&#x1f62d;unique_ptr &#xff08;错误&#xff09; &#x1f579;️例子2Code &…

NLP——序列文本信息处理

序列文本信息处理是指对那些具有明确词序或结构顺序&#xff08;如句子、段落、篇章等&#xff09;的文本数据进行专门的分析和转换&#xff0c;以保留并利用其内在的时序或逻辑关系。在NLP中&#xff0c;处理序列文本信息通常涉及以下几个关键步骤&#xff1a; 分词&#xff0…

zabbix自动发现和自动注册

一、zabbix自动发现 1.1 确保客户端上的zabbix-agent2服务器状态正常 1.2 在web页面删除原有的客户端主机 1.3 在服务端和客户端上配置hosts 1.4 web端配置自动发现 二、zabbix自动注册 2.1 环境配置 2.2 修改zabbix-agent2配置文件 过滤非#或非&#xffe5;开头的内容 2.3 we…

人工智能与汽车行业的定量分析研究

人工智能与汽车行业的定量分析研究 摘要&#xff1a;[论文摘要] 关键词&#xff1a;[论文关键词] 一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术已经深入到各个行业领域&#xff0c;汽车行业亦不例外。AI与汽车行业的结合&#xff0c;不…

LeetCode53. 最大子数组和

LeetCode53. 最大子数组和 解题思路dp 代码 /* 数组长度n 9,连续的区间 那区间长度为1的区间数量是&#xff0c;9个 区间长度为2的区间数量是8个 区间长度为3的连续的区间数量为7个 .... 区间长度为9的区间数量为1个 */ class Solution { public:int maxSubArray(vector<…

ASP.NET Core 3 高级编程(第8版) 学习笔记 03

本篇介绍原书的第 18 章&#xff0c;为 19 章 Restful Service 编写基础代码。本章实现了如下内容&#xff1a; 1&#xff09;使用 Entity Framework Core 操作 Sql Server 数据库 2&#xff09;Entity Framework Core 数据库迁移和使用种子数据的方法 3&#xff09;使用中间件…