diff --git a/pandas/io/tests/generate_legacy_storage_files.py b/pandas/io/tests/generate_legacy_storage_files.py index e7cc89fcc0b61..686efde8402d1 100644 --- a/pandas/io/tests/generate_legacy_storage_files.py +++ b/pandas/io/tests/generate_legacy_storage_files.py @@ -78,7 +78,8 @@ def create_data(): index=MultiIndex.from_tuples(tuple(zip(*[[1, 1, 2, 2, 2], [3, 4, 3, 4, 5]])), names=['one', 'two'])), dup=Series(np.arange(5).astype(np.float64), index=['A', 'B', 'C', 'D', 'A']), - cat=Series(Categorical(['foo', 'bar', 'baz']))) + cat=Series(Categorical(['foo', 'bar', 'baz'])), + per=Series([Period('2000Q1')] * 5)) mixed_dup_df = DataFrame(data) mixed_dup_df.columns = list("ABCDA") diff --git a/pandas/src/period.pyx b/pandas/src/period.pyx index b4a4930e09d68..619d1a87a71e0 100644 --- a/pandas/src/period.pyx +++ b/pandas/src/period.pyx @@ -969,6 +969,14 @@ cdef class Period(object): value = ("%s" % formatted) return value + def __setstate__(self, state): + self.freq=state[1] + self.ordinal=state[2] + + def __reduce__(self): + object_state = None, self.freq, self.ordinal + return (Period, object_state) + def strftime(self, fmt): """ Returns the string representation of the :class:`Period`, depending diff --git a/pandas/tseries/tests/test_period.py b/pandas/tseries/tests/test_period.py index b9757c9e1b5d7..b78b5d5ad71d7 100644 --- a/pandas/tseries/tests/test_period.py +++ b/pandas/tseries/tests/test_period.py @@ -6,6 +6,9 @@ """ +import pickle +import os + from datetime import datetime, date, timedelta from numpy.ma.testutils import assert_equal @@ -2536,6 +2539,14 @@ def test_searchsorted(self): ValueError, 'Different period frequency: H', lambda: pidx.searchsorted(pd.Period('2014-01-01', freq='H'))) + def test_round_trip(self): + + import pickle + p = Period('2000Q1') + + new_p = self.round_trip_pickle(p) + self.assertEqual(new_p, p) + def _permute(obj): return obj.take(np.random.permutation(len(obj)))