json pandas 内存溢出_Pandas在手,告别整理表格数据烦恼(行政人员必看,HR等)...

本文介绍了使用Python的pandas库处理表格数据的方法。首先说明了安装和导入pandas的步骤,接着以读取JSON文件数据为例,展示了如何用pandas解决统计员工薪资表、不同部门平均薪资等需求,还能通过代码生成柱状图、空心饼图等,体现了pandas处理表格数据的高效与便捷。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

每天深陷各项繁琐表格处理中,我们还在用一个一个excel公式处理各种数据,然后呈现出不同图形。累不说,效率低,还不能随心所欲DIY,必须遵序种种excel规则,这种烦恼,苦恼你好久,如果你会python表格处理库pandas,这个问题就可以迎刃而解~~~我们分几步教大家快速学习!!!

step1:

安装pandas:pip install pandas

step2:

# 导入pandas

import pandas as pd

# 读取数据,此数据保存在json文件中,也可以加载excel,csv等表格形式数据

df = pd.read_json("employ_data.json")

step3:

我们看下展现数据,我们熟悉员工信息表

图一

老板说,小王帮我统计下员工薪资表和不同部门平均薪资高低?这时候你拿起计算器,一个一个开始计算,然后记到笔记簿上,在用繁琐excel表格去作图,数据量小还可以,但是大了呢,你得累的~~,这就省略200字,你懂得~ 我们尝试用pandas来解决上述需求

首先我们来做员工薪资表,代码如下:

# 根据列组合视图,values是薪资,name是行指标

employ_salary = df.pivot_table(values='salary',index='name')

# 柱状图展现

employ_salary.plot.bar(title="employ_salary_show",color="purple")

看下效果:员工薪资表

再来做下不同部门平均薪资高低,代码如下:

# 不同部门平均薪资水平

depart_salary_mean = df.groupby("depart")["salary"].mean()

# 横向柱状图展现

depart_salary_mean.plot.barh(subplots=True,title="depart_salary_mean",color="r")

亲ლ(°◕‵ƹ′◕ლ)看下效果:不同部门平均薪资水平

这样看来,几行代码就可以搞定事,你说快乐不快乐,如果没尽兴,再教大家一个炫酷的,空心饼图~~

单纯的看下薪资,一行代码哟~~~

df.iloc[:,2].plot.pie(figsize=(5,5),radius=1,wedgeprops=dict(width=0.3,edgecolor='w'),colors=['r','g','b','y','k'])一眼就可以看出哪号员工薪资最低了哈

只有你想不到的创意,没有pandas不能实现功能!!!

<think>我们面对的任务是压缩或缩减.jsonl文件的大小。.jsonl文件是JSON Lines格式,每行是一个有效的JSON对象,通常用于流式传输或存储大量数据。 缩减文件大小通常有两种思路:一是通过数据压缩(如gzip)减小存储空间;二是通过精简数据内容(如删除不要的字段、缩短键名、减少精度等)来减小文件体积。 根据引用[1]中提到的缩减操作(虽然原意是针对磁盘分区,但概念类似),我们需要注意数据安全,建议先备份再操作。不过,这里我们处理的是普通文件,所以备份也是要的。 步骤建议: 1. 备份原始文件。 2. 考虑使用通用压缩工具(如gzip)进行压缩,得到.gz文件,这种方法不丢失任何数据,但需要解压才能使用。 3. 如果希望保持.jsonl格式且减小文件体积,可以精简文件内容。例如: - 删除不要的字段。 - 缩短键名(如将"description"改为"desc"),但要注意这会影响可读性,且需要后续处理支持。 - 减少数字的精度(如浮点数保留较少的小数位)。 - 删除空格和换行(使每行紧凑,但会降低可读性)。 4. 如果文件中有重复的结构,可以考虑使用更紧凑的表示(例如,将多个对象中相同的键提取出来,但这样会改变结构,可能不再符合JSON Lines格式)。 注意:JSON Lines格式要求每行是一个完整的JSON对象,所以不能像普通JSON那样将整个文件作为一个数组来压缩(因为那样就不是每行一个对象了)。但是,我们可以对每个对象进行压缩,但这通常不是标准做法。 另外,引用[2]提到NumPy数组不能直接进行JSON序列化,但这里我们处理的是已经序列化的.jsonl文件,所以不涉及。但是,如果我们的.jsonl文件中包含大量数值数据,可以考虑使用二进制格式(如MessagePack)来替代,但这会改变文件格式。 因此,针对.jsonl文件的压缩,我们可以采取以下方法: 方法1:使用gzip压缩(不改变内容,只需压缩整个文件) - 命令:`gzip yourfile.jsonl` 得到 yourfile.jsonl.gz 方法2:精简内容(需要编程处理) - 例如,使用Python脚本读取每一行,解析JSON,然后删除或修改某些字段,再重新写入。 下面给出一个Python脚本示例,该脚本读取一个.jsonl文件,对每个JSON对象进行精简(例如,只保留某些字段,或缩短键名),然后输出一个新的.jsonl文件。 假设我们想删除所有JSON对象中的"metadata"字段,并保留其他字段,可以这样做: ```python import json input_file = 'input.jsonl' output_file = 'output.jsonl' with open(input_file, 'r', encoding='utf-8') as infile, open(output_file, 'w', encoding='utf-8') as outfile: for line in infile: # 解析JSON对象 data = json.loads(line) # 删除metadata字段 if 'metadata' in data: del data['metadata'] # 或者,我们可以进行其他操作,如缩短键名,这里需要根据具体数据结构来定 # 例如,将"description"改为"desc" if 'description' in data: data['desc'] = data.pop('description') # 将修改后的对象写入新文件 outfile.write(json.dumps(data, ensure_ascii=False) + '\n') ``` 方法3:去除不要的空格(紧凑存储) - 默认情况下,`json.dumps`输出的字符串是紧凑的(没有多余空格),但如果我们从其他来源得到的.jsonl文件可能包含空格,我们可以通过重新序列化来去除。 方法4:使用二进制JSON格式(如MessagePack) - 将.jsonl文件转换为.msgpack(或其他二进制格式)可以显著减小体积,但这不是.jsonl格式了。 根据引用[3]和[4],我们也可以考虑使用一些模型来压缩文本,但这通常用于自然语言文本,且是有损压缩,可能不适用于数据。 总结: - 无损压缩:使用gzip等工具。 - 有损压缩:通过删除或简化数据(需要明确哪些数据可以删减)。 请根据实际需求选择方法。 相关问题: 1. 如何在不丢失数据的情况下压缩.jsonl文件? 2. 如何使用Python脚本精简.jsonl文件的内容? 3. 如何将.jsonl文件转换为二进制格式以减小体积? 4. 压缩后的.jsonl.gz文件如何读取和处理?</think>### 压缩或缩减 .jsonl 文件的方法 .jsonl 文件(JSON Lines)是每行一个独立 JSON 对象的文本文件。以下是有效的压缩或缩减方法: #### 一、无损压缩(推荐) 1. **Gzip 压缩** 使用命令行工具直接压缩,保留原始数据: ```bash gzip yourfile.jsonl # 生成 yourfile.jsonl.gz ``` 压缩率通常可达 70-90%,解压后完全恢复原始数据[^1]。 2. **Python 自动压缩** 写入时直接压缩: ```python import gzip, json with gzip.open('compressed.jsonl.gz', 'wt') as f: for obj in data_objects: f.write(json.dumps(obj) + '\n') ``` #### 二、有损缩减(减小内容体积) 1. **删除冗余字段** 使用 Python 过滤非要字段: ```python import json keys_to_keep = {"id", "name"} # 保留的字段 with open('reduced.jsonl', 'w') as out: with open('source.jsonl') as src: for line in src: data = json.loads(line) reduced = {k: data[k] for k in keys_to_keep if k in data} out.write(json.dumps(reduced) + '\n') ``` 2. **数值精度缩减** 针对浮点数减少小数位: ```python for obj in data: if "coordinates" in obj: obj["coordinates"] = [round(x, 2) for x in obj["coordinates"]] # 保留2位小数 ``` 3. **字符串优化** - 缩短键名:`{"timestamp" → "ts"}` - 删除多余空格:`json.dumps(obj, separators=(',', ':'))` #### 三、格式转换(针对特定场景) 1. **转二进制格式** 转换到更紧凑的格式: ```python import pandas as pd df = pd.read_json('data.jsonl', lines=True) df.to_parquet('data.parquet') # 体积减少约 50-70% ``` 2. **MessagePack 编码** 二进制 JSON 替代方案: ```python import msgpack with open('data.mpack', 'wb') as f: for line in open('data.jsonl'): f.write(msgpack.packb(json.loads(line))) ``` ### 操作建议 1. **始终备份原始文件**,尤其在进行有损缩减前[^1] 2. **测试压缩效果**:比较 `ls -lh` 查看文件大小变化 3. **流式处理**:对大文件使用逐行读写避免内存溢出 ```python with open('input.jsonl') as fin, open('output.jsonl', 'w') as fout: for line in fin: fout.write(process_line(line)) ``` ### 性能对比 | 方法 | 体积减少 | 是否可逆 | 处理速度 | |------|----------|----------|----------| | Gzip | 70-90% | ✅ 无损 | ⚡ 极快 | | 字段过滤 | 30-80% | ❌ 有损 | ⚡ 快 | | Parquet | 50-75% | ✅ 无损 | ⚡ 快 | | 精度缩减 | 10-40% | ❌ 有损 | ⚡ 快 | > 优先推荐 **Gzip 压缩**,它在保持数据完整性的同时提供最佳压缩率。对于需要频繁读写的场景,可考虑 Parquet 等列式存储格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值