簡體   English   中英

在Python中從磁盤讀取復雜數據結構的最快方法

[英]Fastest way to read complex data structures from disk in Python

我有一個CSV數據集,在一個字段中包含值列表作為字符串,或多或少像這樣:

Id,sequence
1,'1;0;2;6'
2,'0;1'
3,'1;0;9'

在我處理的真實數據集中,序列長度差異很大,可以包含一個到數千個觀測值。 有許多列包含全部存儲為字符串的序列。

我正在讀取這些CSV並解析字符串,以使其成為嵌套在Pandas DataFrame中的列表。 這需要一些時間,但我可以接受。

但是,稍后將解析的結果保存到pickle時,此pickle文件的讀取時間非常長。

我面臨以下問題:

  • 將這種結構的原始〜600mb CSV文件讀取到Pandas大約需要3秒鍾。
  • 從泡菜讀取相同(原始的,未處理的)數據大約需要0.1秒。
  • 從泡菜中讀取處理后的數據需要8秒鍾!

我正在嘗試找到一種以最快的方式從磁盤讀取經過處理的數據的方法。

已經嘗試過:

  • 嘗試使用不同的存儲格式,但是大多數存儲格式無法存儲嵌套結構。 唯一有效的方法是msgpack,但是並沒有提高性能。
  • 使用除Pandas DataFrame之外的結構(例如元組的元組),將面臨類似的性能。

我並不完全依賴確切的數據結構。 事情是我想快速將解析的數據從磁盤直接讀取到Python。

這可能是這個問題的重復

HDF5在處理嵌套的熊貓數據幀方面要快得多。 我會試一試。

此處借用的示例用法說明了如何在轉儲時有效地對其進行分塊:

import glob, os
import pandas as pd

df = DataFrame(np.random.randn(1000,2),columns=list('AB'))
df.to_hdf('test.h5','df',mode='w',format='table',data_columns=True)
store = pd.HDFStore('test.h5')
nrows = store.get_storer('df').nrows
chunksize = 100
for i in xrange(nrows//chunksize + 1):
    chunk = store.select('df',
                         start=i*chunksize,
                         stop=(i+1)*chunksize) 
store.close()

讀回時,您也可以像這樣分塊進行:

for df in pd.read_hdf('raw_sample_storage2.h5','raw_sample_all', start=0,stop=300000,chunksize = 3000):
    print df.info()
    print(df.head(5))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM