Skip to content

Commit 0525684

Browse files
Spencer Carrucciujreback
Spencer Carrucciu
authored andcommitted
ENH: pickle support for Period pandas-dev#10439
1 parent 873bbc2 commit 0525684

File tree

3 files changed

+21
-1
lines changed

3 files changed

+21
-1
lines changed

pandas/io/tests/generate_legacy_storage_files.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ def create_data():
7878
index=MultiIndex.from_tuples(tuple(zip(*[[1, 1, 2, 2, 2], [3, 4, 3, 4, 5]])),
7979
names=['one', 'two'])),
8080
dup=Series(np.arange(5).astype(np.float64), index=['A', 'B', 'C', 'D', 'A']),
81-
cat=Series(Categorical(['foo', 'bar', 'baz'])))
81+
cat=Series(Categorical(['foo', 'bar', 'baz'])),
82+
per=Series([Period('2000Q1')] * 5))
8283

8384
mixed_dup_df = DataFrame(data)
8485
mixed_dup_df.columns = list("ABCDA")

pandas/src/period.pyx

+8
Original file line numberDiff line numberDiff line change
@@ -969,6 +969,14 @@ cdef class Period(object):
969969
value = ("%s" % formatted)
970970
return value
971971

972+
def __setstate__(self, state):
973+
self.freq=state[1]
974+
self.ordinal=state[2]
975+
976+
def __reduce__(self):
977+
object_state = None, self.freq, self.ordinal
978+
return (Period, object_state)
979+
972980
def strftime(self, fmt):
973981
"""
974982
Returns the string representation of the :class:`Period`, depending

pandas/tseries/tests/test_period.py

+11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
77
"""
88

9+
import pickle
10+
import os
11+
912
from datetime import datetime, date, timedelta
1013

1114
from numpy.ma.testutils import assert_equal
@@ -2536,6 +2539,14 @@ def test_searchsorted(self):
25362539
ValueError, 'Different period frequency: H',
25372540
lambda: pidx.searchsorted(pd.Period('2014-01-01', freq='H')))
25382541

2542+
def test_round_trip(self):
2543+
2544+
import pickle
2545+
p = Period('2000Q1')
2546+
2547+
new_p = self.round_trip_pickle(p)
2548+
self.assertEqual(new_p, p)
2549+
25392550
def _permute(obj):
25402551
return obj.take(np.random.permutation(len(obj)))
25412552

0 commit comments

Comments
 (0)