|
30 | 30 | from pandas.core.indexes.frozen import FrozenList, _ensure_frozen
|
31 | 31 | import pandas.core.missing as missing
|
32 | 32 |
|
33 |
| -from pandas.io.formats.printing import format_object_summary, pprint_thing |
| 33 | +from pandas.io.formats.printing import ( |
| 34 | + format_object_attrs, format_object_summary, pprint_thing) |
34 | 35 |
|
35 | 36 | _index_doc_kwargs = dict(ibase._index_doc_kwargs)
|
36 | 37 | _index_doc_kwargs.update(
|
@@ -188,8 +189,10 @@ class MultiIndex(Index):
|
188 | 189 |
|
189 | 190 | >>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
|
190 | 191 | >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))
|
191 |
| - MultiIndex(levels=[[1, 2], ['blue', 'red']], |
192 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 192 | + MultiIndex([(1, 'red'), |
| 193 | + (1, 'blue'), |
| 194 | + (2, 'red'), |
| 195 | + (2, 'blue')], |
193 | 196 | names=['number', 'color'])
|
194 | 197 |
|
195 | 198 | See further examples for how to construct a MultiIndex in the doc strings
|
@@ -319,8 +322,10 @@ def from_arrays(cls, arrays, sortorder=None, names=None):
|
319 | 322 | --------
|
320 | 323 | >>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
|
321 | 324 | >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))
|
322 |
| - MultiIndex(levels=[[1, 2], ['blue', 'red']], |
323 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 325 | + MultiIndex([(1, 'red'), |
| 326 | + (1, 'blue'), |
| 327 | + (2, 'red'), |
| 328 | + (2, 'blue')], |
324 | 329 | names=['number', 'color'])
|
325 | 330 | """
|
326 | 331 | error_msg = "Input must be a list / sequence of array-likes."
|
@@ -384,7 +389,7 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
|
384 | 389 | (1, 'blue'),
|
385 | 390 | (2, 'red'),
|
386 | 391 | (2, 'blue')],
|
387 |
| - dtype='object', names=['number', 'color']) |
| 392 | + names=['number', 'color']) |
388 | 393 | """
|
389 | 394 | if not is_list_like(tuples):
|
390 | 395 | raise TypeError('Input must be a list / sequence of tuple-likes.')
|
@@ -445,7 +450,7 @@ def from_product(cls, iterables, sortorder=None, names=None):
|
445 | 450 | (1, 'purple'),
|
446 | 451 | (2, 'green'),
|
447 | 452 | (2, 'purple')],
|
448 |
| - dtype='object', names=['number', 'color']) |
| 453 | + names=['number', 'color']) |
449 | 454 | """
|
450 | 455 | from pandas.core.arrays.categorical import _factorize_from_iterables
|
451 | 456 | from pandas.core.reshape.util import cartesian_product
|
@@ -503,15 +508,19 @@ def from_frame(cls, df, sortorder=None, names=None):
|
503 | 508 | 3 NJ Precip
|
504 | 509 |
|
505 | 510 | >>> pd.MultiIndex.from_frame(df)
|
506 |
| - MultiIndex(levels=[['HI', 'NJ'], ['Precip', 'Temp']], |
507 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 511 | + MultiIndex([('HI', 'Temp'), |
| 512 | + ('HI', 'Precip'), |
| 513 | + ('NJ', 'Temp'), |
| 514 | + ('NJ', 'Precip')], |
508 | 515 | names=['a', 'b'])
|
509 | 516 |
|
510 | 517 | Using explicit names, instead of the column names
|
511 | 518 |
|
512 | 519 | >>> pd.MultiIndex.from_frame(df, names=['state', 'observation'])
|
513 |
| - MultiIndex(levels=[['HI', 'NJ'], ['Precip', 'Temp']], |
514 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 520 | + MultiIndex([('HI', 'Temp'), |
| 521 | + ('HI', 'Precip'), |
| 522 | + ('NJ', 'Temp'), |
| 523 | + ('NJ', 'Precip')], |
515 | 524 | names=['state', 'observation'])
|
516 | 525 | """
|
517 | 526 | if not isinstance(df, ABCDataFrame):
|
@@ -628,49 +637,30 @@ def set_levels(self, levels, level=None, inplace=False,
|
628 | 637 | >>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
|
629 | 638 | (2, 'one'), (2, 'two')],
|
630 | 639 | names=['foo', 'bar'])
|
631 |
| -<<<<<<< HEAD |
632 |
| - >>> idx.set_levels([['a','b'], [1,2]]) |
633 |
| - MultiIndex(levels=[['a', 'b'], [1, 2]], |
634 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
635 |
| - names=['foo', 'bar']) |
636 |
| - >>> idx.set_levels(['a','b'], level=0) |
637 |
| - MultiIndex(levels=[['a', 'b'], ['one', 'two']], |
638 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
639 |
| - names=['foo', 'bar']) |
640 |
| - >>> idx.set_levels(['a','b'], level='bar') |
641 |
| - MultiIndex(levels=[[1, 2], ['a', 'b']], |
642 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
643 |
| - names=['foo', 'bar']) |
644 |
| - >>> idx.set_levels([['a','b'], [1,2]], level=[0,1]) |
645 |
| - MultiIndex(levels=[['a', 'b'], [1, 2]], |
646 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
647 |
| - names=['foo', 'bar']) |
648 |
| -======= |
649 | 640 | >>> idx.set_levels([['a', 'b'], [1, 2]])
|
650 | 641 | MultiIndex([('a', 1),
|
651 | 642 | ('a', 2),
|
652 | 643 | ('b', 1),
|
653 | 644 | ('b', 2)],
|
654 |
| - dtype='object', names=['foo', 'bar']) |
| 645 | + names=['foo', 'bar']) |
655 | 646 | >>> idx.set_levels(['a', 'b'], level=0)
|
656 | 647 | MultiIndex([('a', 'one'),
|
657 | 648 | ('a', 'two'),
|
658 | 649 | ('b', 'one'),
|
659 | 650 | ('b', 'two')],
|
660 |
| - dtype='object', names=['foo', 'bar']) |
| 651 | + names=['foo', 'bar']) |
661 | 652 | >>> idx.set_levels(['a', 'b'], level='bar')
|
662 | 653 | MultiIndex([(1, 'a'),
|
663 | 654 | (1, 'b'),
|
664 | 655 | (2, 'a'),
|
665 | 656 | (2, 'b')],
|
666 |
| - dtype='object', names=['foo', 'bar']) |
| 657 | + names=['foo', 'bar']) |
667 | 658 | >>> idx.set_levels([['a', 'b'], [1, 2]], level=[0, 1])
|
668 | 659 | MultiIndex([('a', 1),
|
669 | 660 | ('a', 2),
|
670 | 661 | ('b', 1),
|
671 | 662 | ('b', 2)],
|
672 |
| - dtype='object', names=['foo', 'bar']) |
673 |
| ->>>>>>> Update doc string examples and docs |
| 663 | + names=['foo', 'bar']) |
674 | 664 | """
|
675 | 665 | if is_list_like(levels) and not isinstance(levels, Index):
|
676 | 666 | levels = list(levels)
|
@@ -797,26 +787,30 @@ def set_codes(self, codes, level=None, inplace=False,
|
797 | 787 | (1, 'one'),
|
798 | 788 | (2, 'two'),
|
799 | 789 | (1, 'two')],
|
800 |
| - dtype='object', names=['foo', 'bar']) |
| 790 | + names=['foo', 'bar']) |
801 | 791 | >>> idx.set_codes([1, 0, 1, 0], level=0)
|
802 | 792 | MultiIndex([(2, 'one'),
|
803 | 793 | (1, 'two'),
|
804 | 794 | (2, 'one'),
|
805 | 795 | (1, 'two')],
|
806 |
| - dtype='object', names=['foo', 'bar']) |
| 796 | + names=['foo', 'bar']) |
807 | 797 | >>> idx.set_codes([0, 0, 1, 1], level='bar')
|
808 | 798 | MultiIndex([(1, 'one'),
|
809 | 799 | (1, 'one'),
|
810 | 800 | (2, 'two'),
|
811 | 801 | (2, 'two')],
|
812 |
| - dtype='object', names=['foo', 'bar']) |
| 802 | + names=['foo', 'bar']) |
813 | 803 | >>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]], level=[0, 1])
|
814 | 804 | MultiIndex([(2, 'one'),
|
815 | 805 | (1, 'one'),
|
816 | 806 | (2, 'two'),
|
817 | 807 | (1, 'two')],
|
| 808 | +<<<<<<< HEAD |
818 | 809 | dtype='object', names=['foo', 'bar'])
|
819 | 810 | >>>>>>> Update doc string examples and docs
|
| 811 | +======= |
| 812 | + names=['foo', 'bar']) |
| 813 | +>>>>>>> don't show useless dtype in repr |
820 | 814 | """
|
821 | 815 | if level is not None and not is_list_like(level):
|
822 | 816 | if not is_list_like(codes):
|
@@ -980,6 +974,12 @@ def _format_data(self, name=None):
|
980 | 974 | return format_object_summary(self, self._formatter_func,
|
981 | 975 | name=name, line_break_each_value=True)
|
982 | 976 |
|
| 977 | + def _format_attrs(self): |
| 978 | + """ |
| 979 | + Return a list of tuples of the (attr,formatted_value). |
| 980 | + """ |
| 981 | + return format_object_attrs(self, include_dtype=False) |
| 982 | + |
983 | 983 | def _format_native_types(self, na_rep='nan', **kwargs):
|
984 | 984 | new_levels = []
|
985 | 985 | new_codes = []
|
@@ -1575,7 +1575,7 @@ def to_hierarchical(self, n_repeat, n_shuffle=1):
|
1575 | 1575 | (2, 'two'),
|
1576 | 1576 | (2, 'two'),
|
1577 | 1577 | (2, 'two')],
|
1578 |
| - dtype='object') |
| 1578 | + ) |
1579 | 1579 | """
|
1580 | 1580 | levels = self.levels
|
1581 | 1581 | codes = [np.repeat(level_codes, n_repeat) for
|
@@ -1669,14 +1669,14 @@ def _sort_levels_monotonic(self):
|
1669 | 1669 | ('a', 'aa'),
|
1670 | 1670 | ('b', 'bb'),
|
1671 | 1671 | ('b', 'aa')],
|
1672 |
| - dtype='object') |
| 1672 | + ) |
1673 | 1673 |
|
1674 | 1674 | >>> mi.sort_values()
|
1675 | 1675 | MultiIndex([('a', 'aa'),
|
1676 | 1676 | ('a', 'bb'),
|
1677 | 1677 | ('b', 'aa'),
|
1678 | 1678 | ('b', 'bb')],
|
1679 |
| - dtype='object') |
| 1679 | + ) |
1680 | 1680 | """
|
1681 | 1681 |
|
1682 | 1682 | if self.is_lexsorted() and self.is_monotonic:
|
@@ -1731,12 +1731,12 @@ def remove_unused_levels(self):
|
1731 | 1731 | (0, 'b'),
|
1732 | 1732 | (1, 'a'),
|
1733 | 1733 | (1, 'b')],
|
1734 |
| - dtype='object') |
| 1734 | + ) |
1735 | 1735 |
|
1736 | 1736 | >>> mi[2:]
|
1737 | 1737 | MultiIndex([(1, 'a'),
|
1738 | 1738 | (1, 'b')],
|
1739 |
| - dtype='object') |
| 1739 | + ) |
1740 | 1740 |
|
1741 | 1741 | The 0 from the first level is not represented
|
1742 | 1742 | and can be removed
|
@@ -2053,12 +2053,13 @@ def swaplevel(self, i=-2, j=-1):
|
2053 | 2053 | ('a', 'aa'),
|
2054 | 2054 | ('b', 'bb'),
|
2055 | 2055 | ('b', 'aa')],
|
2056 |
| - dtype='object') |
| 2056 | + ) |
2057 | 2057 | >>> mi.swaplevel(0, 1)
|
2058 | 2058 | MultiIndex([('bb', 'a'),
|
2059 | 2059 | ('aa', 'a'),
|
2060 | 2060 | ('bb', 'b'),
|
2061 | 2061 | ('aa', 'b')],
|
| 2062 | + ) |
2062 | 2063 | """
|
2063 | 2064 | new_levels = list(self.levels)
|
2064 | 2065 | new_codes = list(self.codes)
|
|
0 commit comments