Skip to content

Commit 3deb62d

Browse files
committed
ENH: added meta data attribute saving
1 parent 03011c1 commit 3deb62d

File tree

2 files changed

+31
-1
lines changed

2 files changed

+31
-1
lines changed

pandas/io/pytables.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,7 @@ def _write_to_group(self, key, value, table=False, append=False,
503503
wrapper(value)
504504
group._v_attrs.pandas_type = kind
505505
group._v_attrs.pandas_version = _version
506+
group._v_attrs.meta = getattr(value,'meta',None)
506507

507508
def _write_series(self, group, series):
508509
self._write_index(group, 'index', series.index)
@@ -842,7 +843,12 @@ def _read_group(self, group, where=None):
842843
kind = group._v_attrs.pandas_type
843844
kind = _LEGACY_MAP.get(kind, kind)
844845
handler = self._get_handler(op='read', kind=kind)
845-
return handler(group, where)
846+
v = handler(group, where)
847+
if v is not None:
848+
meta = getattr(group._v_attrs,'meta',None)
849+
if meta is not None:
850+
v.meta = meta
851+
return v
846852

847853
def _read_series(self, group, where=None):
848854
index = self._read_index(group, 'index')

pandas/io/tests/test_pytables.py

+24
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,30 @@ def test_versioning(self):
9797
self.assert_(self.store.root.b._v_attrs.pandas_version == '0.10')
9898
self.assert_(self.store.root.df1._v_attrs.pandas_version == '0.10')
9999

100+
def test_meta(self):
101+
meta = { 'foo' : [ 'I love pandas ' ] }
102+
s = tm.makeTimeSeries()
103+
s.meta = meta
104+
self.store['a'] = s
105+
self.assert_(self.store['a'].meta == meta)
106+
107+
df = tm.makeDataFrame()
108+
df.meta = meta
109+
self.store['b'] = df
110+
self.assert_(self.store['b'].meta == meta)
111+
112+
# this should work, but because slicing doesn't propgate meta it doesn
113+
self.store.remove('df1')
114+
self.store.append('df1', df[:10])
115+
self.store.append('df1', df[10:])
116+
results = self.store['df1']
117+
#self.assert_(getattr(results,'meta',None) == meta)
118+
119+
# no meta
120+
df = tm.makeDataFrame()
121+
self.store['b'] = df
122+
self.assert_(hasattr(self.store['b'],'meta') == False)
123+
100124
def test_reopen_handle(self):
101125
self.store['a'] = tm.makeTimeSeries()
102126
self.store.open('w', warn=False)

0 commit comments

Comments
 (0)