Pandas:将一系列字典保存到磁盘

2024-01-04

我有一个 python pandas 系列词典:

id           dicts
1            {'5': 1, '8': 20, '1800': 2}
2            {'2': 2, '8': 1, '1000': 25, '1651': 1}
...          ...
...          ...
...          ...
20000000     {'2': 1, '10': 20}

字典中的(key, value)代表('feature', count)。存在大约 2000 个独特功能。

该系列在 pandas 中的内存使用量约为 500MB。 将该对象写入磁盘的最佳方法是什么(理想情况下磁盘空间使用率较低,并且写入速度快并且之后读回速度快)?

考虑的选项(并尝试了前两个):
- to_csv(但将字典视为字符串,因此之后转换回字典非常慢)
- cPickle(但在执行过程中内存不足)
- 转换为 scipy 稀疏矩阵结构


我很好奇你的Series仅占用500MB。如果您正在使用.memory_usage方法,这只会返回每个 python 对象引用使用的总内存,这是您的 Series 存储的所有内存。这并没有考虑到字典的实际内存。粗略计算 20,000,000 * 288 字节 = 5.76GB 应该是您的内存使用量。 288 字节是每个字典所需内存的保守估计。

转换为稀疏矩阵

无论如何,请尝试以下方法将数据转换为稀疏矩阵表示:

import numpy as np, pandas as pd
from sklearn.feature_extraction import DictVectorizer
from scipy.sparse import csr_matrix
import pickle

我会用ints 而不是字符串作为键,因为这将在以后保持正确的顺序。所以,假设您的系列名为dict_series:

dict_series = dict_series.apply(lambda d: {int(k):d[k] for k in d}

这可能会占用大量内存,您最好简单地创建您的Series of dicts using ints 从一开始就作为键。或者您可以直接跳过此步骤。现在,构建稀疏矩阵:

dv = DictVectorizer(dtype=np.int32)
sparse = dv.fit_transform(dict_series)

保存到磁盘

现在,本质上,您的稀疏矩阵可以从 3 个字段重建:sparse.data, sparse.indices, sparse.indptr,可选地,sparse.shape。节省数组负载的最快且最有效的内存方法sparse.data, sparse.indices, sparse.indptr是使用 np.ndarraytofile方法,它将数组保存为原始字节。来自文档 http://docs.scipy.org/doc/numpy/reference/generated/numpy.ndarray.tofile.html:

这是快速存储阵列数据的便捷功能。 有关字节顺序和精度的信息丢失,因此该方法不适用 对于用于归档数据或传输数据的文件来说是一个不错的选择 具有不同字节序的机器之间。

因此,此方法会丢失任何数据类型信息和字节顺序。前一个问题可以通过事先记下数据类型来解决,无论如何您都会使用 np.int32 。如果您在本地工作,后一个问题不是问题,但如果可移植性很重要,您将需要研究存储信息的替代方法。

# to save
sparse.data.tofile('data.dat')
sparse.indices.tofile('indices.dat')
sparse.indptr.tofile('indptr.dat')
# don't forget your dict vectorizer!
with open('dv.pickle', 'wb') as f:
    pickle.dump(dv,f) # pickle your dv to be able to recover your original data!

要恢复一切:

with open('dv.pickle', 'rb') as f:
    dv = pickle.load(f)

sparse = csr_matrix((np.fromfile('data.dat', dtype = np.int32),
                     np.fromfile('indices.dat', dtype = np.int32),
                     np.fromfile('indptr.dat', dtype = np.int32))

original = pd.Series(dv.inverse_transform(sparse))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pandas:将一系列字典保存到磁盘 的相关文章

  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • 保留完整姓氏,在 pandas 列中获取名字的首字母(如果有的话,还有中间名)

    我有一个 pandas 数据框 其中有一列表示几位网球运动员的姓氏和姓名 如下所示 Player 0 Roddick Andy 1 Federer Roger 2 Tsonga Jo Wilfred 我想保留完整的姓氏并获取姓名的首字母和中
  • Mac OS X 中文件系统的 Unicode 编码在 Python 中不正确?

    在 OS X 和 Python 中处理 Unicode 文件名有点困难 我试图在代码中稍后使用文件名作为正则表达式的输入 但文件名中使用的编码似乎与 sys getfilesystemencoding 告诉我的不同 采取以下代码 usr b
  • Python 中的流式传输管道

    我正在尝试使用 Python 将 vmstat 的输出转换为 CSV 文件 因此我使用类似的方法转换为 CSV 并将日期和时间添加为列 vmstat 5 python myscript py gt gt vmstat log 我遇到的问题是
  • Swift 中的字典是否应该转换为类或结构?

    我正在开发一个本机 iOS 应用程序 该应用程序从我们也可以控制的 Web 服务接收 JSON 格式的数据 该计划是在大约 18 个月内更换后端数据库 以支持不同的平台 考虑到这一点 我们希望确保 iOS 应用程序能够相对容易地适应新的数据
  • Emacs 24.x 上的 IPython 支持

    我对 IPython 与 Emacs 的集成感到困惑 从 Emacs 24 开始 Emacs 附带了自己的python el 该文件是否支持 IPython 还是仅支持 Python 另外 维基百科 http emacswiki org e
  • 一段时间后终止线程的最 Pythonic 方法

    我想在线程中运行一个进程 它正在迭代一个大型数据库表 当线程运行时 我只想让程序等待 如果该线程花费的时间超过 30 秒 我想终止该线程并执行其他操作 通过终止线程 我的意思是我希望它停止活动并优雅地释放资源 我认为最好的方法是通过Thre
  • 结构差异 sudo() run('sudo 命令')

    我想知道函数之间有什么区别sudo 和函数run sudo u user smth 文档上有 sudo 在所有运行方式上都是相同的 除了它总是换行 调用 sudo 程序中的给定命令以提供超级用户 特权 但有几次 sudo cmd 提示我输入
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • Gspread如何复制sheet

    在 Stackoverflow 上进行谷歌搜索和搜索后 我想我找不到有关如何复制现有工作表 现有模板工作表 并将其保存到另一个工作表中的指南 根据文档 有重复表 https gspread readthedocs io en latest
  • Python新式类和__subclasses__函数

    有人可以向我解释为什么这有效 在 Python 2 5 中 class Foo object pass class Bar Foo pass print Foo subclasses 但这不是 class Foo pass class Ba
  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • SocketIO + Flask 检测断开连接

    我在这里有一个不同的问题 但意识到它可以简化为 如何检测客户端何时从页面断开连接 关闭其页面或单击链接 换句话说 套接字连接关闭 我想制作一个带有更新用户列表的聊天应用程序 并且我在 Python 上使用 Flask 当用户连接时 浏览器发
  • 在 Django 查询中使用 .extra(select={...}) 引入的值上使用 .aggregate() ?

    我正在尝试计算玩家每周玩游戏的次数 如下所示 player game objects extra select week WEEK games game date aggregate count Count week 但姜戈抱怨说 Fiel
  • Django Admin 中的反向内联

    我有以下 2 个型号 现在我需要将模型 A 内联到模型 B 的页面上 模型 py class A models Model name models CharField max length 50 class B models Model n
  • Django 与谷歌图表

    我试图让谷歌图表显示在我的页面上 但我不知道如何将值从 django 视图传递到 javascript 以便我可以绘制图表 姜戈代码 array Year Sales Expenses 2004 1000 400 2005 1170 460
  • python 线程安全可变对象复制

    Is 蟒蛇的copy http docs python org 2 library copy html模块线程安全吗 如果不是 我应该如何在 python 中以线程安全的方式复制 deepcopy 可变对象 蟒蛇的GIL http en w
  • 将上下文管理器的动态可迭代链接到单个 with 语句

    我有一堆想要链接的上下文管理器 第一眼看上去 contextlib nested看起来是一个合适的解决方案 但是 此方法在文档中被标记为已弃用 该文档还指出最新的with声明直接允许这样做 自 2 7 版起已弃用 with 语句现在支持此
  • 多个对象以某种方式相互干扰[原始版本]

    我有一个神经网络 NN 当应用于单个数据集时 它可以完美地工作 但是 如果我想在一组数据上运行神经网络 然后创建一个新的神经网络实例以在不同的数据集 甚至再次同一组数据 上运行 那么新实例将产生完全错误的预测 例如 对 XOR 模式进行训练

随机推荐

  • 当我添加对 Cargo.toml 文件的依赖项时,阻止等待包缓存上的文件锁定

    我向 Rust 项目添加了依赖项 然后运行了 Cargo Run 这给了我这个错误 阻止等待包缓存上的文件锁定 我尝试了在网上找到的解决方案 即删除 cargo package cache 文件 但这对我不起作用 当我输入类似 cargo
  • 计划任务调用的批处理文件在计划时抛出错误,双击时运行正常

    我有一个映射网络驱动器的批处理文件 大约一周前 密码过期了 因此调用批处理文件的程序开始抛出错误 我已经更新了批处理文件中的密码 当我双击批处理文件时 驱动器映射正常 但是 当计划任务开始时 我收到以下错误 Logon failure un
  • 我们可以使用 match 来检查类的类型吗

    我是 scala 新手 我正在学习match现在关键字 我想知道我们是否可以使用关键字match检查类的类型 我的代码是 object Main def main args Array String val x AA checkType x
  • Java EE/JPA 向数据库添加新表/实体的方法

    我有一个mysql数据库 我想添加向数据库添加新表的功能 我可能可以轻松找到 JPQL 的示例 但是如何自动为这个新表生成实体 以便我可以在 JPA 代码的其余部分中引用它 以便从表中更新和删除我通常引用该实体不是实际的表本身 我现在拥有的
  • 如何在 Windows 上使用 PyInstaller 创建 Linux 和 MacOS 可执行文件?

    我使用 Pyinstaller 从 python 代码制作了一个独立的 Windows 便携式应用程序 并且它工作正常 我知道要为某个操作系统创建可执行文件 必须在该特定操作系统上完成 有没有一种方法可以直接从 Windows 创建适用于其
  • 阻止 TFS 添加临时文件

    我正在开发一个在 TFS 中绑定的项目 该项目为我提供了一个文件夹 Log 当我执行我的项目并进行一些测试时 它会生成文本文件并存储在 Log 文件夹中 之后 当我尝试签入文件时 这些文件将作为 TFS 中的新文件签入 我希望 TFS 排除
  • python 将 10 位日期时间戳转换为 13 位 GMT 时间戳 [重复]

    这个问题在这里已经有答案了 我从像这样的服务器收到时间戳 1512543958 当我在标头中发回请求时 我看到像这样的 13 位 GMT 时间戳 1512544485819 通过使用下面的代码将时间更改为本地时间 我得到2017 12 06
  • 无状态 Web 应用程序,都市传奇?

    我试图理解token based authentication这些天 它声称是stateless authentication方法 我遇到了这个概念stateless web application 以下是我读到的一些主题 使用 Sprin
  • Ionic4 未知浏览器查询

    我已经练习了很多 Ionic 所以这些问题对我来说并不新鲜 但我无法解决这个问题 我目前正在尝试将我的 Ionic3 项目迁移到 Ionic4 为此 我创建了一个新的 Ionic4 选项卡项目 每次我尝试 Ionic 服务命令时 我都会得到
  • 如何在浏览器客户端使用nunjucks宏?

    当我从 node js 预编译并公开 JS 模板文件时 我可以使用 nunjucks 的客户端模板 我这样称呼客户端模板 nunjucks render partials some template html abc 123 并拿回一根绳子
  • 2.10 中 Scala REPL breakIf 的替代方案

    我正在读书here https stackoverflow com questions 2160355 drop into interpreter during arbitrary scala code location关于使用breakI
  • IE7清除浮动问题

    您好 这是我在使用 IE7 时遇到的问题的简化版本 基本上 清除的 div 绿色 之后的 div 不会按预期运行 在 IE7 中 它在 Safari FF 等和 IE8 中按预期工作 有人有任何修复建议吗 谢谢你的帮助
  • Angular Material 更改应用程序背景和前景主题

    这个问题 https stackoverflow com questions 43919927 关于在 Angular Material 中设置背景颜色的问题于 2017 年发布 答案已过时 最新版本的 Angular Material 1
  • JPQL:将 varchar 转换为数字

    如何将 varchar 转换为 JPQL 中的数字 我设法在 sql Oracle 中使用以下查询来做到这一点 SELECT Decode Upper column name Lower column name To Number colu
  • 处理 argparse 冲突

    如果我导入一个Pythonmodule https github com paulcalabro api kickstart blob master examples python config py已经在使用argparse 但是 我想用
  • 按具有自定义排序优先级的列对数组的数组进行排序(不按字母顺序)

    假设我有这个数组 array array array id gt 7867867 animal gt Dog array id gt 3452342 animal gt Lion array id gt 1231233 animal gt
  • PySpark:当列是列表时向 DataFrame 添加列

    我读过类似的问题 但找不到解决我的具体问题的方法 我有一个清单 l 1 2 3 和一个数据框 df sc parallelize p1 a p2 b p3 c toDF product name 我想获得一个新的 DataFrame 其中列
  • struts 2 中的 beans 属性和 modelDriven

    我是 struts 2 的新手 我创建了一个操作类 它使用以下命令将数据从 JSP 页面插入到 beanModelDriven界面 问题是我有一些非 字符串 properties in the bean likeLong 日期 等 问题是
  • Chrome 多次发送请求

    我有一个 Rails 3 应用程序 刚刚注意到当使用 Chrome 在 Mac 上 访问该应用程序时 网站上的每个页面都会被请求两次 这发生在开发和生产中 Heroku Firefox 和 Safari 仅发送一次请求 即使我删除该操作的所
  • Pandas:将一系列字典保存到磁盘

    我有一个 python pandas 系列词典 id dicts 1 5 1 8 20 1800 2 2 2 2 8 1 1000 25 1651 1 20000000 2 1 10 20 字典中的 key value 代表 feature