|
29 | 29 | from pandas.core.indexes.frozen import FrozenList, _ensure_frozen
|
30 | 30 | import pandas.core.missing as missing
|
31 | 31 |
|
32 |
| -from pandas.io.formats.printing import format_object_summary, pprint_thing |
| 32 | +from pandas.io.formats.printing import ( |
| 33 | + format_object_attrs, format_object_summary, pprint_thing) |
33 | 34 |
|
34 | 35 | _index_doc_kwargs = dict(ibase._index_doc_kwargs)
|
35 | 36 | _index_doc_kwargs.update(
|
@@ -193,8 +194,10 @@ class MultiIndex(Index):
|
193 | 194 |
|
194 | 195 | >>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
|
195 | 196 | >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))
|
196 |
| - MultiIndex(levels=[[1, 2], ['blue', 'red']], |
197 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 197 | + MultiIndex([(1, 'red'), |
| 198 | + (1, 'blue'), |
| 199 | + (2, 'red'), |
| 200 | + (2, 'blue')], |
198 | 201 | names=['number', 'color'])
|
199 | 202 |
|
200 | 203 | See further examples for how to construct a MultiIndex in the doc strings
|
@@ -359,8 +362,10 @@ def from_arrays(cls, arrays, sortorder=None, names=None):
|
359 | 362 | --------
|
360 | 363 | >>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
|
361 | 364 | >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))
|
362 |
| - MultiIndex(levels=[[1, 2], ['blue', 'red']], |
363 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 365 | + MultiIndex([(1, 'red'), |
| 366 | + (1, 'blue'), |
| 367 | + (2, 'red'), |
| 368 | + (2, 'blue')], |
364 | 369 | names=['number', 'color'])
|
365 | 370 | """
|
366 | 371 | error_msg = "Input must be a list / sequence of array-likes."
|
@@ -424,7 +429,7 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
|
424 | 429 | (1, 'blue'),
|
425 | 430 | (2, 'red'),
|
426 | 431 | (2, 'blue')],
|
427 |
| - dtype='object', names=['number', 'color']) |
| 432 | + names=['number', 'color']) |
428 | 433 | """
|
429 | 434 | if not is_list_like(tuples):
|
430 | 435 | raise TypeError('Input must be a list / sequence of tuple-likes.')
|
@@ -485,7 +490,7 @@ def from_product(cls, iterables, sortorder=None, names=None):
|
485 | 490 | (1, 'purple'),
|
486 | 491 | (2, 'green'),
|
487 | 492 | (2, 'purple')],
|
488 |
| - dtype='object', names=['number', 'color']) |
| 493 | + names=['number', 'color']) |
489 | 494 | """
|
490 | 495 | from pandas.core.arrays.categorical import _factorize_from_iterables
|
491 | 496 | from pandas.core.reshape.util import cartesian_product
|
@@ -543,15 +548,19 @@ def from_frame(cls, df, sortorder=None, names=None):
|
543 | 548 | 3 NJ Precip
|
544 | 549 |
|
545 | 550 | >>> pd.MultiIndex.from_frame(df)
|
546 |
| - MultiIndex(levels=[['HI', 'NJ'], ['Precip', 'Temp']], |
547 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 551 | + MultiIndex([('HI', 'Temp'), |
| 552 | + ('HI', 'Precip'), |
| 553 | + ('NJ', 'Temp'), |
| 554 | + ('NJ', 'Precip')], |
548 | 555 | names=['a', 'b'])
|
549 | 556 |
|
550 | 557 | Using explicit names, instead of the column names
|
551 | 558 |
|
552 | 559 | >>> pd.MultiIndex.from_frame(df, names=['state', 'observation'])
|
553 |
| - MultiIndex(levels=[['HI', 'NJ'], ['Precip', 'Temp']], |
554 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 560 | + MultiIndex([('HI', 'Temp'), |
| 561 | + ('HI', 'Precip'), |
| 562 | + ('NJ', 'Temp'), |
| 563 | + ('NJ', 'Precip')], |
555 | 564 | names=['state', 'observation'])
|
556 | 565 | """
|
557 | 566 | if not isinstance(df, ABCDataFrame):
|
@@ -669,49 +678,30 @@ def set_levels(self, levels, level=None, inplace=False,
|
669 | 678 | >>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
|
670 | 679 | (2, 'one'), (2, 'two')],
|
671 | 680 | names=['foo', 'bar'])
|
672 |
| -<<<<<<< HEAD |
673 |
| - >>> idx.set_levels([['a','b'], [1,2]]) |
674 |
| - MultiIndex(levels=[['a', 'b'], [1, 2]], |
675 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
676 |
| - names=['foo', 'bar']) |
677 |
| - >>> idx.set_levels(['a','b'], level=0) |
678 |
| - MultiIndex(levels=[['a', 'b'], ['one', 'two']], |
679 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
680 |
| - names=['foo', 'bar']) |
681 |
| - >>> idx.set_levels(['a','b'], level='bar') |
682 |
| - MultiIndex(levels=[[1, 2], ['a', 'b']], |
683 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
684 |
| - names=['foo', 'bar']) |
685 |
| - >>> idx.set_levels([['a','b'], [1,2]], level=[0,1]) |
686 |
| - MultiIndex(levels=[['a', 'b'], [1, 2]], |
687 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
688 |
| - names=['foo', 'bar']) |
689 |
| -======= |
690 | 681 | >>> idx.set_levels([['a', 'b'], [1, 2]])
|
691 | 682 | MultiIndex([('a', 1),
|
692 | 683 | ('a', 2),
|
693 | 684 | ('b', 1),
|
694 | 685 | ('b', 2)],
|
695 |
| - dtype='object', names=['foo', 'bar']) |
| 686 | + names=['foo', 'bar']) |
696 | 687 | >>> idx.set_levels(['a', 'b'], level=0)
|
697 | 688 | MultiIndex([('a', 'one'),
|
698 | 689 | ('a', 'two'),
|
699 | 690 | ('b', 'one'),
|
700 | 691 | ('b', 'two')],
|
701 |
| - dtype='object', names=['foo', 'bar']) |
| 692 | + names=['foo', 'bar']) |
702 | 693 | >>> idx.set_levels(['a', 'b'], level='bar')
|
703 | 694 | MultiIndex([(1, 'a'),
|
704 | 695 | (1, 'b'),
|
705 | 696 | (2, 'a'),
|
706 | 697 | (2, 'b')],
|
707 |
| - dtype='object', names=['foo', 'bar']) |
| 698 | + names=['foo', 'bar']) |
708 | 699 | >>> idx.set_levels([['a', 'b'], [1, 2]], level=[0, 1])
|
709 | 700 | MultiIndex([('a', 1),
|
710 | 701 | ('a', 2),
|
711 | 702 | ('b', 1),
|
712 | 703 | ('b', 2)],
|
713 |
| - dtype='object', names=['foo', 'bar']) |
714 |
| ->>>>>>> Update doc string examples and docs |
| 704 | + names=['foo', 'bar']) |
715 | 705 | """
|
716 | 706 | if is_list_like(levels) and not isinstance(levels, Index):
|
717 | 707 | levels = list(levels)
|
@@ -820,25 +810,25 @@ def set_codes(self, codes, level=None, inplace=False,
|
820 | 810 | (1, 'one'),
|
821 | 811 | (2, 'two'),
|
822 | 812 | (1, 'two')],
|
823 |
| - dtype='object', names=['foo', 'bar']) |
| 813 | + names=['foo', 'bar']) |
824 | 814 | >>> idx.set_codes([1, 0, 1, 0], level=0)
|
825 | 815 | MultiIndex([(2, 'one'),
|
826 | 816 | (1, 'two'),
|
827 | 817 | (2, 'one'),
|
828 | 818 | (1, 'two')],
|
829 |
| - dtype='object', names=['foo', 'bar']) |
| 819 | + names=['foo', 'bar']) |
830 | 820 | >>> idx.set_codes([0, 0, 1, 1], level='bar')
|
831 | 821 | MultiIndex([(1, 'one'),
|
832 | 822 | (1, 'one'),
|
833 | 823 | (2, 'two'),
|
834 | 824 | (2, 'two')],
|
835 |
| - dtype='object', names=['foo', 'bar']) |
| 825 | + names=['foo', 'bar']) |
836 | 826 | >>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]], level=[0, 1])
|
837 | 827 | MultiIndex([(2, 'one'),
|
838 | 828 | (1, 'one'),
|
839 | 829 | (2, 'two'),
|
840 | 830 | (1, 'two')],
|
841 |
| - dtype='object', names=['foo', 'bar']) |
| 831 | + names=['foo', 'bar']) |
842 | 832 | """
|
843 | 833 | if level is not None and not is_list_like(level):
|
844 | 834 | if not is_list_like(codes):
|
@@ -1002,6 +992,12 @@ def _format_data(self, name=None):
|
1002 | 992 | return format_object_summary(self, self._formatter_func,
|
1003 | 993 | name=name, line_break_each_value=True)
|
1004 | 994 |
|
| 995 | + def _format_attrs(self): |
| 996 | + """ |
| 997 | + Return a list of tuples of the (attr,formatted_value). |
| 998 | + """ |
| 999 | + return format_object_attrs(self, include_dtype=False) |
| 1000 | + |
1005 | 1001 | def _format_native_types(self, na_rep='nan', **kwargs):
|
1006 | 1002 | new_levels = []
|
1007 | 1003 | new_codes = []
|
@@ -1599,7 +1595,7 @@ def to_hierarchical(self, n_repeat, n_shuffle=1):
|
1599 | 1595 | (2, 'two'),
|
1600 | 1596 | (2, 'two'),
|
1601 | 1597 | (2, 'two')],
|
1602 |
| - dtype='object') |
| 1598 | + ) |
1603 | 1599 | """
|
1604 | 1600 | levels = self.levels
|
1605 | 1601 | codes = [np.repeat(level_codes, n_repeat) for
|
@@ -1697,14 +1693,14 @@ def _sort_levels_monotonic(self):
|
1697 | 1693 | ('a', 'aa'),
|
1698 | 1694 | ('b', 'bb'),
|
1699 | 1695 | ('b', 'aa')],
|
1700 |
| - dtype='object') |
| 1696 | + ) |
1701 | 1697 |
|
1702 | 1698 | >>> mi.sort_values()
|
1703 | 1699 | MultiIndex([('a', 'aa'),
|
1704 | 1700 | ('a', 'bb'),
|
1705 | 1701 | ('b', 'aa'),
|
1706 | 1702 | ('b', 'bb')],
|
1707 |
| - dtype='object') |
| 1703 | + ) |
1708 | 1704 | """
|
1709 | 1705 |
|
1710 | 1706 | if self.is_lexsorted() and self.is_monotonic:
|
@@ -1759,12 +1755,12 @@ def remove_unused_levels(self):
|
1759 | 1755 | (0, 'b'),
|
1760 | 1756 | (1, 'a'),
|
1761 | 1757 | (1, 'b')],
|
1762 |
| - dtype='object') |
| 1758 | + ) |
1763 | 1759 |
|
1764 | 1760 | >>> mi[2:]
|
1765 | 1761 | MultiIndex([(1, 'a'),
|
1766 | 1762 | (1, 'b')],
|
1767 |
| - dtype='object') |
| 1763 | + ) |
1768 | 1764 |
|
1769 | 1765 | The 0 from the first level is not represented
|
1770 | 1766 | and can be removed
|
@@ -2082,12 +2078,13 @@ def swaplevel(self, i=-2, j=-1):
|
2082 | 2078 | ('a', 'aa'),
|
2083 | 2079 | ('b', 'bb'),
|
2084 | 2080 | ('b', 'aa')],
|
2085 |
| - dtype='object') |
| 2081 | + ) |
2086 | 2082 | >>> mi.swaplevel(0, 1)
|
2087 | 2083 | MultiIndex([('bb', 'a'),
|
2088 | 2084 | ('aa', 'a'),
|
2089 | 2085 | ('bb', 'b'),
|
2090 | 2086 | ('aa', 'b')],
|
| 2087 | + ) |
2091 | 2088 | """
|
2092 | 2089 | new_levels = list(self.levels)
|
2093 | 2090 | new_codes = list(self.codes)
|
|
0 commit comments