gpt4 book ai didi

python - 对于不是很大的文件,Pytables 与 CSV

转载 作者:太空狗 更新时间:2023-10-29 21:30:02 25 4
gpt4 key购买 nike

我最近接触到 Pytables,发现它非常酷。很明显,对于非常大的数据集,它们优于 csv 格式。我正在使用 python 运行一些模拟。输出不是很大,比如 200 列和 2000 行。

如果有人对这两种格式都有经验,您能否建议从长远来看,对于这种不是很大的数据集,哪种格式更方便。 Pytables 具有数据操作功能和使用 Vitables 浏览数据,但浏览器没有 Excel 那样多的功能,后者可用于 CSV。同样,如果主要使用 Python,您是否发现一个比另一个更适合导入和导出数据?在文件组织方面更方便吗?对此类问题的任何评论都会有所帮助。

谢谢。

最佳答案

您是否考虑过 Numpy 数组?

当您的数据太大而无法放入内存时,PyTables 非常有用,但是8 字节 float 的 200x2000 矩阵只需要大约 3MB 的内存。所以我认为PyTables 可能有点矫枉过正。

您可以使用 np.savetxtnp.savez(用于压缩)将 numpy 数组保存到文件中,并可以使用 np.loadtxt 从文件中读取它们np.load

如果您有很多这样的数组要存储在磁盘上,那么我建议使用数据库而不是 numpy .npz 文件。顺便说一下,要在数据库中存储一个 200x2000 的矩阵,您只需要 3 个表格列:行、列、值:

import sqlite3
import numpy as np

db = sqlite3.connect(':memory:')
cursor = db.cursor()
cursor.execute('''CREATE TABLE foo
(row INTEGER,
col INTEGER,
value FLOAT,
PRIMARY KEY (row,col))''')
ROWS=4
COLUMNS=6
matrix = np.random.random((ROWS,COLUMNS))
print(matrix)
# [[ 0.87050721 0.22395398 0.19473001 0.14597821 0.02363803 0.20299432]
# [ 0.11744885 0.61332597 0.19860043 0.91995295 0.84857095 0.53863863]
# [ 0.80123759 0.52689885 0.05861043 0.71784406 0.20222138 0.63094807]
# [ 0.01309897 0.45391578 0.04950273 0.93040381 0.41150517 0.66263562]]

# Store matrix in table foo
cursor.executemany('INSERT INTO foo(row, col, value) VALUES (?,?,?) ',
((r,c,value) for r,row in enumerate(matrix)
for c,value in enumerate(row)))

# Retrieve matrix from table foo
cursor.execute('SELECT value FROM foo ORDER BY row,col')
data=zip(*cursor.fetchall())[0]
matrix2 = np.fromiter(data,dtype=np.float).reshape((ROWS,COLUMNS))
print(matrix2)
# [[ 0.87050721 0.22395398 0.19473001 0.14597821 0.02363803 0.20299432]
# [ 0.11744885 0.61332597 0.19860043 0.91995295 0.84857095 0.53863863]
# [ 0.80123759 0.52689885 0.05861043 0.71784406 0.20222138 0.63094807]
# [ 0.01309897 0.45391578 0.04950273 0.93040381 0.41150517 0.66263562]]

如果您有很多这样的 200x2000 矩阵,您只需要多一个表列来指定哪个矩阵。

关于python - 对于不是很大的文件,Pytables 与 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4022887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com