Skip to content

Commit edaad31

Browse files
committed
BUG: ensure that key aliases get properly converted when assigned to Series from DataFrame slice, close #1644
1 parent 6a26249 commit edaad31

File tree

4 files changed

+24
-5
lines changed

4 files changed

+24
-5
lines changed

RELEASE.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,8 @@ pandas 0.8.1
9191
- Fix cases where extra keywords weren't being passed on to matplotlib from
9292
Series.plot (#1636)
9393
- Fix BusinessMonthBegin logic for dates before 1st bday of month (#1645)
94+
- Ensure string alias converted (valid in DatetimeIndex.get_loc) in
95+
DataFrame.xs / __getitem__ (#1644)
9496

9597
pandas 0.8.0
9698
============

pandas/core/frame.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1684,12 +1684,11 @@ def _getitem_multilevel(self, key):
16841684
return self._get_item_cache(key)
16851685

16861686
def _box_item_values(self, key, values):
1687+
items = self.columns[self.columns.get_loc(key)]
16871688
if values.ndim == 2:
1688-
item_cols = self.columns[self.columns.get_loc(key)]
1689-
return DataFrame(values.T, columns=item_cols,
1690-
index=self.index)
1689+
return DataFrame(values.T, columns=items, index=self.index)
16911690
else:
1692-
return Series(values, index=self.index, name=key)
1691+
return Series(values, index=self.index, name=items)
16931692

16941693
def __getattr__(self, name):
16951694
"""After regular attribute access, try looking up the name of a column.
@@ -1893,7 +1892,8 @@ def xs(self, key, axis=0, level=None, copy=True):
18931892

18941893
if np.isscalar(loc):
18951894
new_values = self._data.fast_2d_xs(loc, copy=copy)
1896-
return Series(new_values, index=self.columns, name=key)
1895+
return Series(new_values, index=self.columns,
1896+
name=self.index[loc])
18971897
else: # isinstance(loc, slice) or loc.dtype == np.bool_:
18981898
result = self[loc]
18991899
result.index = new_index

pandas/tseries/index.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,12 @@ def _add_delta(self, delta):
446446
new_values = self.astype('O') + delta
447447
return DatetimeIndex(new_values, tz=self.tz, freq='infer')
448448

449+
def __contains__(self, key):
450+
try:
451+
return np.isscalar(self.get_loc(key))
452+
except (KeyError, TypeError):
453+
return False
454+
449455
def groupby(self, f):
450456
objs = self.asobject
451457
return _algos.groupby_object(objs, f)

pandas/tseries/tests/test_timeseries.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1847,6 +1847,17 @@ def test_date_range_bms_bug(self):
18471847
ex_first = Timestamp('2000-01-03')
18481848
self.assertEquals(rng[0], ex_first)
18491849

1850+
def test_string_index_series_name_converted(self):
1851+
# #1644
1852+
df = DataFrame(np.random.randn(10, 4),
1853+
index=date_range('1/1/2000', periods=10))
1854+
1855+
result = df.ix['1/3/2000']
1856+
self.assertEquals(result.name, df.index[2])
1857+
1858+
result = df.T['1/3/2000']
1859+
self.assertEquals(result.name, df.index[2])
1860+
18501861
class TestTimestamp(unittest.TestCase):
18511862

18521863
def test_basics_nanos(self):

0 commit comments

Comments
 (0)