2012-10-16 9 views
5

Bir pandas veri çerçevesine nasıl csv okuma hakkında bilgi bir sürü, ama ben bir pirincli bir tablo ve bir panda DataFrame istiyorum.pandalar içine püskürtülen tablo DataFrame

nasıl benim pandalar DataFrame için pytables saklamak için bulduk ... geri okumak ister okumak, bu noktada sahip olacaktır:

"kind = v._v_attrs.pandas_type" 

Ben bunu yazabilirim csv olarak ve yeniden okuyun ama bu aptalca görünüyor. Şu an için yaptığım şey bu.

Pandalara püskürtülen nesneleri nasıl okumalıyım? Pandalar henüz mevcut olan dtypes tam kapsamlı desteklemediği için

cevap

5
import tables as pt 
import pandas as pd 
import numpy as np 

# the content is junk but we don't care 
grades = np.empty((10,2), dtype=(('name', 'S20'), ('grade', 'u2'))) 

# write to a PyTables table 
handle = pt.openFile('/tmp/test_pandas.h5', 'w') 
handle.createTable('/', 'grades', grades) 
print handle.root.grades[:].dtype # it is a structured array 

# load back as a DataFrame and check types 
df = pd.DataFrame.from_records(handle.root.grades[:]) 
df.dtypes 

, senin u2 (işaretsiz 2 bayt tamsayı) bir i8 (tamsayı 8 bayt) olarak sona erecek dikkat ve dizeleri nesneler olacak Numpy dizileri için.

+0

Teşekkürler ama bu panda h5 dosyasındaki verileri panda h5 dosyasına nasıl okur? Sadece bir panda h5 dosyasına rastgele veri koyar gibi görünüyor. Kaynak tablomu şu şekilde okuyabilirim: 'Tabloda rec için:' ancak tablo pandas h5 dosyası değil, sadece pnottable bir tablodur, bu yüzden 'pandas_type' değil çünkü pandas kaynağı olarak başarısız olur. –

+0

Bu arada biraz daha zaman harcayacağım ... Yapmam gereken tek şey, mevcut piliç masamıza ekstra veri tipi bilgisi içeren yapılandırılmış bir dizi eklemek ve sonra pandalar df'ye mi girecek? Gerçekten sadece pyTable'larla nasıl çalışacağımı biliyorum ... Veri tipi bilgilerini yaprak nesnesindeki özniteliklerde tutar. eğer bu doğruysa, pandalar iki yaprak nesnesine nasıl bağlanır? (bir veri türü bilgisi ile, biri veri tablosuyla birlikte) –

+0

np notları olarak np.empty ((10,2), dtype = (('name', 'S20'), ('notu') 'u2'))) Bu bir hata olmalı python kodu anlamadı –

5

Dokümanlar artık using the HDF5 store üzerinde mükemmel bir bölüm içerir ve cookbook'da açıklanan bazı daha gelişmiş stratejiler vardır.

In [1]: store = HDFStore('store.h5') 

In [2]: print store 
<class 'pandas.io.pytables.HDFStore'> 
File path: store.h5 
Empty 

In [3]: df = DataFrame([[1, 2], [3, 4]], columns=['A', 'B']) 

In [4]: store['df'] = df 

In [5]: store 
<class 'pandas.io.pytables.HDFStore'> 
File path: store.h5 
/df   frame  (shape->[2,2]) 

Ve HDF5/pytables dan almak için:

Artık nispeten basittir

In [6]: store['df'] # store.get('df') is an equivalent 
Out[6]: 
    A B 
0 1 2 
1 3 4 

yapabilirsiniz ayrıca query within a table.