2016-11-11 6 views
0

가 원주 DB를 구축하지 않고 디스크에 저장하려면이 있습니다 : 그냥 속도의 기간에 가장 효율적인 어느 궁금Python에서 큰 원주 형 텍스트 + 숫자 데이터를 저장하는 방법은 무엇입니까?

SQLLite, 
HDFS5 : only numeric/fixed string 
pickle serialization  
csv 
csv compressed. 
.... 

? 감사합니다.

+0

하는 텍스트 열을 저장하는 것은 까다로운 일이 될 수도 ... 어떤 것 문자열 값의 최대 길이? – MaxU

+0

300 문자 (쉽게 만들 수 있음). – Brook

+0

깃털과 HDF5, MySQL 또는 PostgreSQL을 고려해보십시오. 데이터를 쿼리하는 방법에 따라 옵션이 될 수도 있습니다 ... – MaxU

답변

1

깃털, HDF5를 고려해 보겠습니다. - MySQL의 또는 PostgreSQL을 또한 옵션이 여기에

이 HDF5에 대한 데모입니다 ... 당신은 당신의 데이터를 쿼리하려고하는 방법에 따라 될 수 있습니다

In [33]: df = pd.DataFrame(np.random.randint(0, 10**6, (10**4, 3)), columns=list('abc')) 

In [34]: df['txt'] = 'X' * 300 

In [35]: df 
Out[35]: 
      a  b  c            txt 
0  689347 129498 770470 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX... 
1  954132 97912 783288 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX... 
2  40548 938326 861212 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX... 
3  869895 39293 242473 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX... 
4  938918 487643 362942 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX... 
... 

In [37]: df.to_hdf('c:/temp/test_str.h5', 'test', format='t', data_columns=['a', 'c']) 

In [38]: store = pd.HDFStore('c:/temp/test_str.h5') 

In [39]: store.get_storer('test').table 
Out[39]: 
/test/table (Table(10000,)) '' 
    description := { 
    "index": Int64Col(shape=(), dflt=0, pos=0), 
    "values_block_0": Int32Col(shape=(1,), dflt=0, pos=1), 
    "values_block_1": StringCol(itemsize=300, shape=(1,), dflt=b'', pos=2), # <---- NOTE 
    "a": Int32Col(shape=(), dflt=0, pos=3), 
    "c": Int32Col(shape=(), dflt=0, pos=4)} 
    byteorder := 'little' 
    chunkshape := (204,) 
    autoindex := True 
    colindexes := { 
    "index": Index(6, medium, shuffle, zlib(1)).is_csi=False, 
    "a": Index(6, medium, shuffle, zlib(1)).is_csi=False, 
    "c": Index(6, medium, shuffle, zlib(1)).is_csi=False} 
+1

예, 알고 있습니다. 그러나 중단되면 HDF5가 손상됩니다. 그래서 블레이즈가 결합 된 zip 파일 관리자로 이동하고 있습니다. – Brook