2013-07-23 9 views
10

Pandy ma nice interface który ułatwia przechowywanie rzeczy jak Dataframes i Series w hdf5:Przechowywanie Pandy obiektów wraz z regularnych obiektów Pythona w hdf5

random_matrix = np.random.random_integers(0,10, m_size) 
my_dataframe = pd.DataFrame(random_matrix) 

store = pd.HDFStore('some_file.h5',complevel=9, complib='bzip2') 
store['my_dataframe'] = my_dataframe 
store.close() 

Ale gdy próbuję zapisać kilka innych obiektów regularne Python w taki sam plik, narzeka:

my_dictionary = dict() 
my_dictionary['a'] = 2   # <--- ERROR 
my_dictionary['b'] = [2,3,4] 

store['my_dictionary'] = my_dictionary 
store.close() 

z

TypeError: cannot properly create the storer for: [_TYPE_MAP] [group->/par 
ameters (Group) u'',value-><type 'dict'>,table->None,append->False,kwargs- 
>{}]         

Jak mogę Stor regularne struktury danych Pythona w tym samym HDF5, gdzie przechowuję inne obiekty Pandy?

Odpowiedz

11

Oto przykład z książki kucharskiej: http://pandas.pydata.org/pandas-docs/stable/cookbook.html#hdfstore

można przechowywać dowolne obiekty jako atrybuty węzła. Wierzę, że istnieje limit 64 kb (myślę, że jego całkowite dane atrybutów dla tego węzła). Obiekty są kiszone

In [1]: df = DataFrame(np.random.randn(8,3)) 

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

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

# you can store an arbitrary python object via pickle 
In [4]: store.get_storer('df').attrs.my_attribute = dict(A = 10) 

In [5]: store.get_storer('df').attrs.my_attribute 
{'A': 10} 
+0

Dzięki! Przy okazji otrzymuję 'PerformanceWarnings' z niektórymi komendami' store'. Próbowałem wyłączyć je z: 'import ostrzeżenia; warnings.simplefilter (action = "ignore", category = PerformanceWarning) 'ale otrzymuję komunikat' Name 'PerformanceWarning' nie jest zdefiniowany. Czy wiesz, jak je ignorować? –

+1

Właściwie powinieneś zwrócić na to uwagę. Zasadniczo mówią one, że przechowujesz typ danych, który PyTables zamierza "zalać"! Spróbuj zapisać jako tabelę (użyj '' append'' lub '' store.put ('df', df, table = True) '', które przechowuje w formacie '' Tabela '', lepsze radzenie sobie z takimi rzeczami jak '' nan'' niektórych dtypes (że format 'Storer'' dostarczy Ci PerfWarning. Zobacz http://pandas.pydata.org/pandas-docs/dev/io.html#table-format – Jeff

+1

Jeśli naprawdę chcesz wycisz je, spróbuj: '' from pandas.io.pytables import PerformanceWarning'', ale zobacz mój komentarz powyżej .. To jest powód – Jeff

Powiązane problemy