Cur*_*arn 7 python csv pytables
我最近遇到了Pytables并发现它非常酷.很明显,对于非常大的数据集,它们优于csv格式.我正在使用python运行一些模拟.输出不是很大,比如200列和2000行.
如果有人对两者都有经验,那么从长远来看,你能否建议哪种格式对于不是很大的数据集会更方便.Pytables具有数据处理功能和使用Vitables浏览数据,但浏览器没有像Excel那样可用于CSV的功能.同样,如果主要在python中工作,你是否找到一个比另一个更好的导入和导出数据?在文件组织方面更方便吗?对这些问题的任何评论都会有所帮助.
谢谢.
你考虑过Numpy阵列吗?
当你的数据太大而无法容纳在内存中时,PyTables很棒,但是一个200字节的8字节浮点矩阵只需要大约3MB的内存.所以我觉得PyTables可能有点矫枉过正.
您可以使用保存numpy的阵列到文件np.savetxt或np.savez(压缩),并可以从文件中读取与他们np.loadtxt或np.load.
如果你有许多这样的数组存储在磁盘上,那么我建议使用数据库而不是numpy .npz文件.顺便说一下,要在数据库中存储200x2000矩阵,您只需要3个表列:row,col,value:
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]]
Run Code Online (Sandbox Code Playgroud)
如果你有许多这样的200x2000矩阵,你只需要一个表列来指定哪个矩阵.