Skip to content

Commit ff548c9

Browse files
Add missing keys and tests
1 parent 51d7bca commit ff548c9

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

pandas/io/packers.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ def unconvert(values, dtype, compress=None):
234234
if dtype == np.object_:
235235
return np.array(values, dtype=object)
236236

237+
values = values.encode('latin1')
238+
237239
if compress == 'zlib':
238240
import zlib
239241
values = zlib.decompress(values)
@@ -245,7 +247,7 @@ def unconvert(values, dtype, compress=None):
245247
return np.frombuffer(values, dtype=dtype)
246248

247249
# from a string
248-
return np.fromstring(values.encode('latin1'), dtype=dtype)
250+
return np.fromstring(values, dtype=dtype)
249251

250252

251253
def encode(obj):
@@ -261,7 +263,8 @@ def encode(obj):
261263
'name': getattr(obj, 'name', None),
262264
'freq': getattr(obj, 'freqstr', None),
263265
'dtype': obj.dtype.num,
264-
'data': convert(obj.asi8)}
266+
'data': convert(obj.asi8),
267+
'compress': compressor}
265268
elif isinstance(obj, DatetimeIndex):
266269
tz = getattr(obj, 'tz', None)
267270

@@ -275,19 +278,22 @@ def encode(obj):
275278
'dtype': obj.dtype.num,
276279
'data': convert(obj.asi8),
277280
'freq': getattr(obj, 'freqstr', None),
278-
'tz': tz}
281+
'tz': tz,
282+
'compress': compressor}
279283
elif isinstance(obj, MultiIndex):
280284
return {'typ': 'multi_index',
281285
'klass': obj.__class__.__name__,
282286
'names': getattr(obj, 'names', None),
283287
'dtype': obj.dtype.num,
284-
'data': convert(obj.values)}
288+
'data': convert(obj.values),
289+
'compress': compressor}
285290
else:
286291
return {'typ': 'index',
287292
'klass': obj.__class__.__name__,
288293
'name': getattr(obj, 'name', None),
289294
'dtype': obj.dtype.num,
290-
'data': convert(obj.values)}
295+
'data': convert(obj.values),
296+
'compress': compressor}
291297
elif isinstance(obj, Series):
292298
if isinstance(obj, SparseSeries):
293299
raise NotImplementedError(

pandas/io/tests/test_packers.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,37 @@ def test_sparse_panel(self):
446446
check_panel_type=True)
447447

448448

449+
class TestCompression(TestPackers):
450+
451+
def setUp(self):
452+
super(TestCompression, self).setUp()
453+
data = {
454+
'A': np.arange(1000, dtype=float),
455+
'B': range(1000),
456+
'C': list(100 * 'abcdefghij'),
457+
}
458+
self.frame = {
459+
'float': DataFrame(dict([(k, data[k]) for k in ['A', 'A']])),
460+
'int': DataFrame(dict([(k, data[k]) for k in ['B', 'B']])),
461+
'mixed': DataFrame(dict([(k, data[k]) for k in ['A', 'B', 'C']])),
462+
}
463+
464+
def test_plain(self):
465+
i_rec = self.encode_decode(self.frame, compress='zlib')
466+
for k in self.frame.keys():
467+
assert_frame_equal(self.frame[k], i_rec[k])
468+
469+
def test_compression_zlib(self):
470+
i_rec = self.encode_decode(self.frame, compress='zlib')
471+
for k in self.frame.keys():
472+
assert_frame_equal(self.frame[k], i_rec[k])
473+
474+
def test_compression_blosc(self):
475+
i_rec = self.encode_decode(self.frame, compress='blosc')
476+
for k in self.frame.keys():
477+
assert_frame_equal(self.frame[k], i_rec[k])
478+
479+
449480
if __name__ == '__main__':
450481
import nose
451482
nose.runmodule(argv=[__file__, '-vvs', '-x', '--pdb', '--pdb-failure'],

0 commit comments

Comments
 (0)