2013-07-23 1 views
10

팬더는 HDF5에 Dataframes 및 시리즈 등을 저장하기 용이하게하는 nice interface이 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() 

을하지만 같은 몇 가지 다른 일반 파이썬 객체를 저장하려고하면 파일, 그것은 불평 :

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

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

내가 STOR 어떻게

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

로 다른 팬더 객체를 저장하는 동일한 HDF5의 일반 파이썬 데이터 구조

답변

11

다음은 요리 책에서 예제 : http://pandas.pydata.org/pandas-docs/stable/cookbook.html#hdfstore

당신은 노드의 속성으로 임의의 객체를 저장할 수 있습니다. 나는 거기에 64 킬로바이트 한도가 있다고 믿는다 (나는 그 노드에 대한 전체 속성 데이터라고 생각한다). 물체는 절임

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

고마워요! 그건 그렇고,'store' 명령으로'PerformanceWarnings'을 얻었습니다. 나는 그들을 사용하지 못하게하려고했다 :'import warnings; warnings.simplefilter (action = "ignore", category = PerformanceWarning)'하지만 Name 'PerformanceWarning'이 정의되지 않았습니다. 그들을 음소거하는 방법을 알고 있습니까? –

+1

사실 이것들에주의를 기울여야합니다. 이것들은 기본적으로 PyTables가''pickle''에 갈 데이터 타입을 저장하고 있다고 말합니다! ''Table ''형식으로 저장하는''append'' 또는''store.put ('df ', df, table = True)''를 사용하여 테이블로 저장해보십시오;'' (''Storer'' 형식은 PerfWarning을 줄 것입니다.) http://pandas.pydata.org/pandas-docs/dev/io.html#table-format – Jeff

+1

정말로 원한다면 음소거, 시도 :''pandas.io.pytables import PerformanceWarning''에서. 그러나 내 코멘트를 참조하십시오. 여기에 이유가 있습니다 – Jeff