2013-07-23 52 views
10

Pandas có nice interface tạo điều kiện cho việc lưu trữ những thứ như Dataframes và Series trong một HDF5:Lưu trữ Pandas đối tượng cùng với các đối tượng Python thường xuyên trong 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() 

Nhưng nếu tôi cố gắng tiết kiệm một số đối tượng Python thường xuyên khác trong cùng tập tin, nó than phiền:

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

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

với

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

Làm thế nào tôi có thể Stor e thường xuyên cấu trúc dữ liệu Python trong cùng một HDF5 nơi tôi lưu trữ các đối tượng Pandas khác?

Trả lời

11

Dưới đây là các ví dụ từ sách dạy nấu ăn: http://pandas.pydata.org/pandas-docs/stable/cookbook.html#hdfstore

Bạn có thể lưu trữ đối tượng tùy ý như các thuộc tính của một nút. Tôi tin rằng có một giới hạn 64kb (tôi nghĩ rằng tổng số dữ liệu thuộc tính của nó cho nút đó). Các đối tượng được chọn

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

Cảm ơn! Nhân tiện, tôi nhận được 'PerformanceWarnings' với một số lệnh' store'. Tôi đã thử vô hiệu hóa chúng bằng: 'cảnh báo nhập khẩu; warnings.simplefilter (action = "ignore", category = PerformanceWarning) 'nhưng tôi nhận được' Name 'PerformanceWarning' không được định nghĩa'. Bạn có biết cách tắt tiếng họ không? –

+1

Thực ra bạn nên chú ý đến những điều này. Những điều này về cơ bản đang nói rằng bạn đang lưu trữ một kiểu dữ liệu mà PyTables sẽ là '' pickle''! Hãy thử lưu trữ dưới dạng bảng (hoặc sử dụng '' append'' hoặc '' store.put ('df', df, table = True) '' lưu trữ trong định dạng '' Table ''; xử lý tốt hơn những thứ như '' nan'' dtypes nào đó (định dạng '' Storer'' sẽ cho bạn PerfWarning. Xem http://pandas.pydata.org/pandas-docs/dev/io.html#table-format – Jeff

+1

Nếu bạn thực sự muốn tắt chúng, hãy thử: '' từ pandas.io.pytables import PerformanceWarning'' nhưng xem bình luận của tôi ở trên Đây là lý do tại sao – Jeff

Các vấn đề liên quan