关于表格太大了jupyter无法单次处理的问题

记录下自己的心路历程...耗时耗精力

我用的数据库单个表格就很大,一个表格有30多G,jupyter无法处理这么大的表格,会直接把电脑的进程全部结束掉,结束掉要是能运行成功倒也行啊,然鹅...给我报错说处理不了,罢工了...

有想过用pycharm来处理,试了下,也不行,文件太大了,处理不了,在网上搜怎么处理这种大文件,有这么几个解决办法:
1. Dask: Dask 是一个用于并行计算的灵活库,它提供了类似于 Pandas 的接口,但能够处理比内存更大的数据集。你可以使用 Dask DataFrame 来处理大型数据,它允许你进行分布式计算,将数据分块加载到内存中。

bash 复制代码
import dask.dataframe as dd
读取大型CSV文件
df = dd.read_csv('your_large_file.csv')
执行操作(例如,过滤、聚合)
result = df[df['column_name'] > 100].groupby('another_column').mean()
将结果写入文件
result.to_csv('output.csv', single_file=True)

2. 分块处理: 使用 Pandas 的 read_csv 方法时,可以使用 chunksize 参数,将数据集分割成小块进行处理,而不是一次性读入整个数据集。这可以减少内存压力。

bash 复制代码
chunk_size = 100000  # 适当调整块的大小
chunks = pd.read_csv('your_large_file.csv', chunksize=chunk_size)
for chunk in chunks:
    # 处理每个块的数据

3. 合理选择数据类型 : 确保使用适当的数据类型,以减少内存使用。例如,将整数列转换为 int32 或 int64,将浮点数列转换为 float32 或 float64。
4. 使用合适的硬件: 如果可能,考虑使用具有大量内存的计算机或云实例。处理大型数据集可能需要更大的内存。

1 2 的方法适用于表格文件行之间没有关联的,如果表格每行之间都是独立的,可以考虑1 2的方法;3的话会改变数据类型,在我的项目中不太适用这个方法,于是想找云服务器来处理,以下是云服务器的历程...

-- 本来想用谷歌云,听说怪好用的,但死在了第一步,visa银行卡没有

-- 于是转战国内的阿里云,说实话阿里云感觉有点坑,而且选择项太多了,之前没用过,对新手不友好

-- 想到了Kaggle,以前只知道是打比赛的,进去一看也有在线notebook,界面很简洁,新手友好型,还能上传自己的数据库,能传100G,不过单个文件也一次只能处理20G

最后,没法了就用postgresql先处理了一下表格,把不需要的列删除,很奇怪的是,在我删了五六列后其大小没变小反而增到了40G,搜了下,可能是postgre缓存了些数据,用这个语句可以删除缓存的内容:

sql 复制代码
--删除缓存
VACUUM ANALYZE 你的表格名;
--察看文件大小
SELECT pg_size_pretty(pg_total_relation_size('你的表格名'));

其实...这样之后我的表格还是没变小,我用上面那个语句查我的表格还是40G,但是!!!!!!!!我将其export后,它的大小是18G,差不多满足Kaggle处理文件的size,后来想了下原因,可能是它需要时间来放空间??

反正就这样了,把处理后的数据传到kaggle上就好了!总结:

  1. 如果不是很复杂的表格操作的话,建议用postgresql来处理表格,它没大小限制;
  2. 如果表格间数据没有强相关性,可以考虑分块、并行处理;
  3. 可以借助云服务器来编程,还不耗计算机内存,推荐Kaggle,只是它传数据库要好久...我传30G用了一晚
相关推荐
船长Talk几秒前
NumPy+Pandas数据分析基础完全指南
python
Wyz20121024几秒前
宝塔面板安装后显示无法连接数据库_检查MySQL服务状态
jvm·数据库·python
2301_777599372 分钟前
Redis如何优化大量对象存储_利用Hash结构减少内存碎片占用
jvm·数据库·python
2301_777599373 分钟前
Python怎么解压tar.gz_tarfile模块提取打包文件操作
jvm·数据库·python
小白学大数据6 分钟前
Python 爬取图片攻略:告别水印,批量保存高清图片
开发语言·python
2301_815279527 分钟前
HTML怎么标注密钥权限范围_HTML “仅读取用户信息”说明【操作】
jvm·数据库·python
m0_678485459 分钟前
Go语言怎么用Jaeger_Go语言Jaeger链路追踪教程【实用】
jvm·数据库·python
NotFound48611 分钟前
c++如何通过解析二进制PE文件头检测程序是否开启了DEP保护机制【进阶】
jvm·数据库·python
zhangchaoxies13 分钟前
PHP源码能否在NAS设备上运行_NAS部署PHP源码可行性【教程】
jvm·数据库·python
2301_7641505618 分钟前
如何在 Laravel 中正确保存嵌套动态表单数据(主服务 + 子服务)
jvm·数据库·python