Skip to content

Commit eb00827

Browse files
changhiskhanwesm
authored andcommitted
BUG: PeriodIndex as DataFrame column should box to Periods #2243 #2281
1 parent 5971637 commit eb00827

File tree

2 files changed

+21
-2
lines changed

2 files changed

+21
-2
lines changed

pandas/core/frame.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2022,6 +2022,8 @@ def _sanitize_column(self, key, value):
20222022

20232023
if not isinstance(value, np.ndarray):
20242024
value = com._asarray_tuplesafe(value)
2025+
elif isinstance(value, PeriodIndex):
2026+
value = value.asobject
20252027
else:
20262028
value = value.copy()
20272029
else:
@@ -2699,7 +2701,11 @@ def _maybe_cast(values):
26992701
lev_num = self.columns._get_level_number(col_level)
27002702
name_lst[lev_num] = name
27012703
name = tuple(name_lst)
2702-
new_obj.insert(0, name, _maybe_cast(self.index.values))
2704+
if isinstance(self.index, PeriodIndex):
2705+
values = self.index.asobject
2706+
else:
2707+
values = self.index.values
2708+
new_obj.insert(0, name, _maybe_cast(values))
27032709

27042710
new_obj.index = new_index
27052711
return new_obj

pandas/tseries/tests/test_period.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from pandas import Timestamp
1616
from pandas.tseries.frequencies import MONTHS, DAYS
1717
from pandas.tseries.period import Period, PeriodIndex, period_range
18-
from pandas.tseries.index import DatetimeIndex, date_range
18+
from pandas.tseries.index import DatetimeIndex, date_range, Index
1919
from pandas.tseries.tools import to_datetime
2020
import pandas.tseries.period as pmod
2121

@@ -1300,6 +1300,19 @@ def test_as_frame_columns(self):
13001300
ts = df['1/1/2000']
13011301
assert_series_equal(ts, df.ix[:, 0])
13021302

1303+
def test_frame_setitem(self):
1304+
rng = period_range('1/1/2000', periods=5)
1305+
rng.name = 'index'
1306+
df = DataFrame(randn(5, 3), index=rng)
1307+
1308+
df['Index'] = rng
1309+
rs = Index(df['Index'])
1310+
self.assert_(rs.equals(rng))
1311+
1312+
rs = df.reset_index().set_index('index')
1313+
self.assert_(isinstance(rs.index, PeriodIndex))
1314+
self.assert_(rs.index.equals(rng))
1315+
13031316
def test_nested_dict_frame_constructor(self):
13041317
rng = period_range('1/1/2000', periods=5)
13051318
df = DataFrame(randn(10, 5), columns=rng)

0 commit comments

Comments
 (0)