Skip to content

Commit ef76764

Browse files
committed
BUG: index integer name format bug, plus handle non-string columns in groupby, GH pandas-dev#405
1 parent eaf38f9 commit ef76764

File tree

6 files changed

+24
-3
lines changed

6 files changed

+24
-3
lines changed

RELEASE.rst

+2
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ pandas 0.6.0
154154
- Enable partial setting with .ix / advanced indexing (GH #397)
155155
- Handle mixed-type DataFrames correctly in unstack, do not lose type
156156
information (GH #403)
157+
- Fix integer name formatting bug in Index.format and in Series.__repr__
158+
- Handle label types other than string passed to groupby (GH #405)
157159

158160
Thanks
159161
------

pandas/core/groupby.py

+4-1
Original file line numberDiff line numberDiff line change
@@ -633,7 +633,7 @@ def _get_groupings(obj, grouper=None, axis=0, level=None):
633633
exclusions = []
634634
for i, (gpr, level) in enumerate(zip(groupers, levels)):
635635
name = None
636-
if isinstance(gpr, basestring):
636+
if _is_label_like(gpr):
637637
exclusions.append(gpr)
638638
name = gpr
639639
gpr = obj[gpr]
@@ -644,6 +644,9 @@ def _get_groupings(obj, grouper=None, axis=0, level=None):
644644

645645
return groupings, exclusions
646646

647+
def _is_label_like(val):
648+
return isinstance(val, basestring) or np.isscalar(val)
649+
647650
def _convert_grouper(axis, grouper):
648651
if isinstance(grouper, dict):
649652
return grouper.get

pandas/core/index.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ def format(self, name=False):
206206
result = []
207207

208208
if name:
209-
result.append(self.name if self.name is not None else '')
209+
result.append(str(self.name) if self.name is not None else '')
210210

211211
if self.is_all_dates():
212212
zero_time = time(0, 0)

pandas/core/series.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ def _get_repr(self, name=False, print_header=False, length=True,
410410
header, string_index = string_index[0], string_index[1:]
411411
else:
412412
have_header = index.name is not None
413-
header = index.name
413+
header = str(index.name)
414414
string_index = index.format()
415415

416416
maxlen = max(len(x) for x in string_index)

pandas/tests/test_groupby.py

+8
Original file line numberDiff line numberDiff line change
@@ -1026,6 +1026,14 @@ def test_groupby_series_with_name(self):
10261026
self.assert_('A' in result2)
10271027
self.assert_('B' in result2)
10281028

1029+
def test_groupby_nonstring_columns(self):
1030+
df = DataFrame([np.arange(10) for x in range(10)])
1031+
grouped = df.groupby(0)
1032+
result = grouped.mean()
1033+
expected = df.groupby(df[0]).mean()
1034+
del expected[0]
1035+
assert_frame_equal(result, expected)
1036+
10291037
class TestPanelGroupBy(unittest.TestCase):
10301038

10311039
def setUp(self):

pandas/tests/test_index.py

+8
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,14 @@ def test_take_preserve_name(self):
588588
taken = index.take([3,0,1])
589589
self.assertEqual(index.name, taken.name)
590590

591+
def test_int_name_format(self):
592+
from pandas import Series, DataFrame
593+
index = Index(['a', 'b', 'c'], name=0)
594+
s = Series(range(3), index)
595+
df = DataFrame(range(3), index=index)
596+
repr(s)
597+
repr(df)
598+
591599
class TestMultiIndex(unittest.TestCase):
592600

593601
def setUp(self):

0 commit comments

Comments
 (0)