Skip to content

Assigning array of >1 dim to index produces inconsistent index #13601

@toobaz

Description

@toobaz

Code Sample, a copy-pastable example if possible

In [3]: s = pd.Series(0, range(4))

In [4]: s.index = np.array([[2,3]]*4)

In [5]: s
Out[5]: ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/home/nobackup/repo/ipython/IPython/core/formatters.py in __call__(self, obj)
    683                 type_pprinters=self.type_printers,
    684                 deferred_pprinters=self.deferred_printers)
--> 685             printer.pretty(obj)
    686             printer.flush()
    687             return stream.getvalue()

/home/nobackup/repo/ipython/IPython/lib/pretty.py in pretty(self, obj)
    381                             if callable(meth):
    382                                 return meth(obj, self, cycle)
--> 383             return _default_pprint(obj, self, cycle)
    384         finally:
    385             self.end_group()

/home/nobackup/repo/ipython/IPython/lib/pretty.py in _default_pprint(obj, p, cycle)
    501     if _safe_getattr(klass, '__repr__', None) not in _baseclass_reprs:
    502         # A user-provided repr. Find newlines and replace them with p.break_()
--> 503         _repr_pprint(obj, p, cycle)
    504         return
    505     p.begin_group(1, '<')

/home/nobackup/repo/ipython/IPython/lib/pretty.py in _repr_pprint(obj, p, cycle)
    692     """A pprint that just redirects to the normal repr function."""
    693     # Find newlines and replace them with p.break_()
--> 694     output = repr(obj)
    695     for idx,output_line in enumerate(output.splitlines()):
    696         if idx:

/home/nobackup/repo/pandas/pandas/core/base.py in __repr__(self)
     65         Yields Bytestring in Py2, Unicode String in py3.
     66         """
---> 67         return str(self)
     68 
     69 

/home/nobackup/repo/pandas/pandas/core/base.py in __str__(self)
     44 
     45         if compat.PY3:
---> 46             return self.__unicode__()
     47         return self.__bytes__()
     48 

/home/nobackup/repo/pandas/pandas/core/series.py in __unicode__(self)
    979 
    980         self.to_string(buf=buf, name=self.name, dtype=self.dtype,
--> 981                        max_rows=max_rows)
    982         result = buf.getvalue()
    983 

/home/nobackup/repo/pandas/pandas/core/series.py in to_string(self, buf, na_rep, float_format, header, index, length, dtype, name, max_rows)
   1020         the_repr = self._get_repr(float_format=float_format, na_rep=na_rep,
   1021                                   header=header, index=index, length=length,
-> 1022                                   dtype=dtype, name=name, max_rows=max_rows)
   1023 
   1024         # catch contract violations

/home/nobackup/repo/pandas/pandas/core/series.py in _get_repr(self, name, header, index, length, dtype, na_rep, float_format, max_rows)
   1048                                         float_format=float_format,
   1049                                         max_rows=max_rows)
-> 1050         result = formatter.to_string()
   1051 
   1052         # TODO: following check prob. not neces.

/home/nobackup/repo/pandas/pandas/formats/format.py in to_string(self)
    227             return 'Series([], ' + footer + ')'
    228 
--> 229         fmt_index, have_header = self._get_formatted_index()
    230         fmt_values = self._get_formatted_values()
    231 

/home/nobackup/repo/pandas/pandas/formats/format.py in _get_formatted_index(self)
    213         else:
    214             have_header = index.name is not None
--> 215             fmt_index = index.format(name=True)
    216         return fmt_index, have_header
    217 

/home/nobackup/repo/pandas/pandas/indexes/base.py in format(self, name, formatter, **kwargs)
   1525             return header + list(self.map(formatter))
   1526 
-> 1527         return self._format_with_header(header, **kwargs)
   1528 
   1529     def _format_with_header(self, header, na_rep='NaN', **kwargs):

/home/nobackup/repo/pandas/pandas/indexes/base.py in _format_with_header(self, header, na_rep, **kwargs)
   1549 
   1550         else:
-> 1551             result = _trim_front(format_array(values, None, justify='left'))
   1552         return header + result
   1553 

/home/nobackup/repo/pandas/pandas/formats/format.py in format_array(values, formatter, float_format, na_rep, digits, space, justify, decimal)
   2021                         space=space, justify=justify, decimal=decimal)
   2022 
-> 2023     return fmt_obj.get_result()
   2024 
   2025 

/home/nobackup/repo/pandas/pandas/formats/format.py in get_result(self)
   2040 
   2041     def get_result(self):
-> 2042         fmt_values = self._format_strings()
   2043         return _make_fixed_width(fmt_values, self.justify)
   2044 

/home/nobackup/repo/pandas/pandas/formats/format.py in _format_strings(self)
   2226     def _format_strings(self):
   2227         formatter = self.formatter or (lambda x: '% d' % x)
-> 2228         fmt_values = [formatter(x) for x in self.values]
   2229         return fmt_values
   2230 

/home/nobackup/repo/pandas/pandas/formats/format.py in <listcomp>(.0)
   2226     def _format_strings(self):
   2227         formatter = self.formatter or (lambda x: '% d' % x)
-> 2228         fmt_values = [formatter(x) for x in self.values]
   2229         return fmt_values
   2230 

/home/nobackup/repo/pandas/pandas/formats/format.py in <lambda>(x)
   2225 class IntArrayFormatter(GenericArrayFormatter):
   2226     def _format_strings(self):
-> 2227         formatter = self.formatter or (lambda x: '% d' % x)
   2228         fmt_values = [formatter(x) for x in self.values]
   2229         return fmt_values

TypeError: %d format: a number is required, not numpy.ndarray

Expected Output

It would be cool if this became a MultiIndex automatically, but otherwise it should just raise an error (or maybe it's just the string representation which is broken?)

output of pd.show_versions()

In [6]: pd.show_versions()

INSTALLED VERSIONS
------------------
commit: a63bd12529ff309d957d714825b1753d0e02b7fa
python: 3.5.1.final.0
python-bits: 64
OS: Linux
OS-release: 4.5.0-2-amd64
machine: x86_64
processor: 
byteorder: little
LC_ALL: None
LANG: it_IT.utf8
LOCALE: it_IT.UTF-8

pandas: 0.18.1+174.ga63bd12
nose: 1.3.7
pip: 1.5.6
setuptools: 18.4
Cython: 0.23.4
numpy: 1.10.4
scipy: 0.16.0
statsmodels: 0.8.0.dev0+111ddc0
xarray: None
IPython: 5.0.0.dev
sphinx: 1.3.1
patsy: 0.3.0-dev
dateutil: 2.2
pytz: 2012c
blosc: None
bottleneck: 1.1.0dev
tables: 3.2.2
numexpr: 2.5
matplotlib: 1.5.1
openpyxl: None
xlrd: 0.9.4
xlwt: 1.1.2
xlsxwriter: 0.7.3
lxml: None
bs4: 4.4.0
html5lib: 0.999
httplib2: 0.9.1
apiclient: 1.5.0
sqlalchemy: 1.0.11
pymysql: None
psycopg2: None
jinja2: 2.8
boto: 2.38.0
pandas_datareader: 0.2.1

Metadata

Metadata

Assignees

No one assigned

    Labels

    Error ReportingIncorrect or improved errors from pandasIndexRelated to the Index class or subclasses

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions