|
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(
|
@@ -192,8 +193,10 @@ class MultiIndex(Index):
|
192 | 193 |
|
193 | 194 | >>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
|
194 | 195 | >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))
|
195 |
| - MultiIndex(levels=[[1, 2], ['blue', 'red']], |
196 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 196 | + MultiIndex([(1, 'red'), |
| 197 | + (1, 'blue'), |
| 198 | + (2, 'red'), |
| 199 | + (2, 'blue')], |
197 | 200 | names=['number', 'color'])
|
198 | 201 |
|
199 | 202 | See further examples for how to construct a MultiIndex in the doc strings
|
@@ -318,8 +321,10 @@ def from_arrays(cls, arrays, sortorder=None, names=None):
|
318 | 321 | --------
|
319 | 322 | >>> arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
|
320 | 323 | >>> pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))
|
321 |
| - MultiIndex(levels=[[1, 2], ['blue', 'red']], |
322 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 324 | + MultiIndex([(1, 'red'), |
| 325 | + (1, 'blue'), |
| 326 | + (2, 'red'), |
| 327 | + (2, 'blue')], |
323 | 328 | names=['number', 'color'])
|
324 | 329 | """
|
325 | 330 | error_msg = "Input must be a list / sequence of array-likes."
|
@@ -383,7 +388,7 @@ def from_tuples(cls, tuples, sortorder=None, names=None):
|
383 | 388 | (1, 'blue'),
|
384 | 389 | (2, 'red'),
|
385 | 390 | (2, 'blue')],
|
386 |
| - dtype='object', names=['number', 'color']) |
| 391 | + names=['number', 'color']) |
387 | 392 | """
|
388 | 393 | if not is_list_like(tuples):
|
389 | 394 | raise TypeError('Input must be a list / sequence of tuple-likes.')
|
@@ -444,7 +449,7 @@ def from_product(cls, iterables, sortorder=None, names=None):
|
444 | 449 | (1, 'purple'),
|
445 | 450 | (2, 'green'),
|
446 | 451 | (2, 'purple')],
|
447 |
| - dtype='object', names=['number', 'color']) |
| 452 | + names=['number', 'color']) |
448 | 453 | """
|
449 | 454 | from pandas.core.arrays.categorical import _factorize_from_iterables
|
450 | 455 | from pandas.core.reshape.util import cartesian_product
|
@@ -502,15 +507,19 @@ def from_frame(cls, df, sortorder=None, names=None):
|
502 | 507 | 3 NJ Precip
|
503 | 508 |
|
504 | 509 | >>> pd.MultiIndex.from_frame(df)
|
505 |
| - MultiIndex(levels=[['HI', 'NJ'], ['Precip', 'Temp']], |
506 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 510 | + MultiIndex([('HI', 'Temp'), |
| 511 | + ('HI', 'Precip'), |
| 512 | + ('NJ', 'Temp'), |
| 513 | + ('NJ', 'Precip')], |
507 | 514 | names=['a', 'b'])
|
508 | 515 |
|
509 | 516 | Using explicit names, instead of the column names
|
510 | 517 |
|
511 | 518 | >>> pd.MultiIndex.from_frame(df, names=['state', 'observation'])
|
512 |
| - MultiIndex(levels=[['HI', 'NJ'], ['Precip', 'Temp']], |
513 |
| - codes=[[0, 0, 1, 1], [1, 0, 1, 0]], |
| 519 | + MultiIndex([('HI', 'Temp'), |
| 520 | + ('HI', 'Precip'), |
| 521 | + ('NJ', 'Temp'), |
| 522 | + ('NJ', 'Precip')], |
514 | 523 | names=['state', 'observation'])
|
515 | 524 | """
|
516 | 525 | if not isinstance(df, ABCDataFrame):
|
@@ -627,49 +636,30 @@ def set_levels(self, levels, level=None, inplace=False,
|
627 | 636 | >>> idx = pd.MultiIndex.from_tuples([(1, 'one'), (1, 'two'),
|
628 | 637 | (2, 'one'), (2, 'two')],
|
629 | 638 | names=['foo', 'bar'])
|
630 |
| -<<<<<<< HEAD |
631 |
| - >>> idx.set_levels([['a','b'], [1,2]]) |
632 |
| - MultiIndex(levels=[['a', 'b'], [1, 2]], |
633 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
634 |
| - names=['foo', 'bar']) |
635 |
| - >>> idx.set_levels(['a','b'], level=0) |
636 |
| - MultiIndex(levels=[['a', 'b'], ['one', 'two']], |
637 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
638 |
| - names=['foo', 'bar']) |
639 |
| - >>> idx.set_levels(['a','b'], level='bar') |
640 |
| - MultiIndex(levels=[[1, 2], ['a', 'b']], |
641 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
642 |
| - names=['foo', 'bar']) |
643 |
| - >>> idx.set_levels([['a','b'], [1,2]], level=[0,1]) |
644 |
| - MultiIndex(levels=[['a', 'b'], [1, 2]], |
645 |
| - codes=[[0, 0, 1, 1], [0, 1, 0, 1]], |
646 |
| - names=['foo', 'bar']) |
647 |
| -======= |
648 | 639 | >>> idx.set_levels([['a', 'b'], [1, 2]])
|
649 | 640 | MultiIndex([('a', 1),
|
650 | 641 | ('a', 2),
|
651 | 642 | ('b', 1),
|
652 | 643 | ('b', 2)],
|
653 |
| - dtype='object', names=['foo', 'bar']) |
| 644 | + names=['foo', 'bar']) |
654 | 645 | >>> idx.set_levels(['a', 'b'], level=0)
|
655 | 646 | MultiIndex([('a', 'one'),
|
656 | 647 | ('a', 'two'),
|
657 | 648 | ('b', 'one'),
|
658 | 649 | ('b', 'two')],
|
659 |
| - dtype='object', names=['foo', 'bar']) |
| 650 | + names=['foo', 'bar']) |
660 | 651 | >>> idx.set_levels(['a', 'b'], level='bar')
|
661 | 652 | MultiIndex([(1, 'a'),
|
662 | 653 | (1, 'b'),
|
663 | 654 | (2, 'a'),
|
664 | 655 | (2, 'b')],
|
665 |
| - dtype='object', names=['foo', 'bar']) |
| 656 | + names=['foo', 'bar']) |
666 | 657 | >>> idx.set_levels([['a', 'b'], [1, 2]], level=[0, 1])
|
667 | 658 | MultiIndex([('a', 1),
|
668 | 659 | ('a', 2),
|
669 | 660 | ('b', 1),
|
670 | 661 | ('b', 2)],
|
671 |
| - dtype='object', names=['foo', 'bar']) |
672 |
| ->>>>>>> Update doc string examples and docs |
| 662 | + names=['foo', 'bar']) |
673 | 663 | """
|
674 | 664 | if is_list_like(levels) and not isinstance(levels, Index):
|
675 | 665 | levels = list(levels)
|
@@ -778,25 +768,25 @@ def set_codes(self, codes, level=None, inplace=False,
|
778 | 768 | (1, 'one'),
|
779 | 769 | (2, 'two'),
|
780 | 770 | (1, 'two')],
|
781 |
| - dtype='object', names=['foo', 'bar']) |
| 771 | + names=['foo', 'bar']) |
782 | 772 | >>> idx.set_codes([1, 0, 1, 0], level=0)
|
783 | 773 | MultiIndex([(2, 'one'),
|
784 | 774 | (1, 'two'),
|
785 | 775 | (2, 'one'),
|
786 | 776 | (1, 'two')],
|
787 |
| - dtype='object', names=['foo', 'bar']) |
| 777 | + names=['foo', 'bar']) |
788 | 778 | >>> idx.set_codes([0, 0, 1, 1], level='bar')
|
789 | 779 | MultiIndex([(1, 'one'),
|
790 | 780 | (1, 'one'),
|
791 | 781 | (2, 'two'),
|
792 | 782 | (2, 'two')],
|
793 |
| - dtype='object', names=['foo', 'bar']) |
| 783 | + names=['foo', 'bar']) |
794 | 784 | >>> idx.set_codes([[1, 0, 1, 0], [0, 0, 1, 1]], level=[0, 1])
|
795 | 785 | MultiIndex([(2, 'one'),
|
796 | 786 | (1, 'one'),
|
797 | 787 | (2, 'two'),
|
798 | 788 | (1, 'two')],
|
799 |
| - dtype='object', names=['foo', 'bar']) |
| 789 | + names=['foo', 'bar']) |
800 | 790 | """
|
801 | 791 | if level is not None and not is_list_like(level):
|
802 | 792 | if not is_list_like(codes):
|
@@ -960,6 +950,12 @@ def _format_data(self, name=None):
|
960 | 950 | return format_object_summary(self, self._formatter_func,
|
961 | 951 | name=name, line_break_each_value=True)
|
962 | 952 |
|
| 953 | + def _format_attrs(self): |
| 954 | + """ |
| 955 | + Return a list of tuples of the (attr,formatted_value). |
| 956 | + """ |
| 957 | + return format_object_attrs(self, include_dtype=False) |
| 958 | + |
963 | 959 | def _format_native_types(self, na_rep='nan', **kwargs):
|
964 | 960 | new_levels = []
|
965 | 961 | new_codes = []
|
@@ -1557,7 +1553,7 @@ def to_hierarchical(self, n_repeat, n_shuffle=1):
|
1557 | 1553 | (2, 'two'),
|
1558 | 1554 | (2, 'two'),
|
1559 | 1555 | (2, 'two')],
|
1560 |
| - dtype='object') |
| 1556 | + ) |
1561 | 1557 | """
|
1562 | 1558 | levels = self.levels
|
1563 | 1559 | codes = [np.repeat(level_codes, n_repeat) for
|
@@ -1655,14 +1651,14 @@ def _sort_levels_monotonic(self):
|
1655 | 1651 | ('a', 'aa'),
|
1656 | 1652 | ('b', 'bb'),
|
1657 | 1653 | ('b', 'aa')],
|
1658 |
| - dtype='object') |
| 1654 | + ) |
1659 | 1655 |
|
1660 | 1656 | >>> mi.sort_values()
|
1661 | 1657 | MultiIndex([('a', 'aa'),
|
1662 | 1658 | ('a', 'bb'),
|
1663 | 1659 | ('b', 'aa'),
|
1664 | 1660 | ('b', 'bb')],
|
1665 |
| - dtype='object') |
| 1661 | + ) |
1666 | 1662 | """
|
1667 | 1663 |
|
1668 | 1664 | if self.is_lexsorted() and self.is_monotonic:
|
@@ -1717,12 +1713,12 @@ def remove_unused_levels(self):
|
1717 | 1713 | (0, 'b'),
|
1718 | 1714 | (1, 'a'),
|
1719 | 1715 | (1, 'b')],
|
1720 |
| - dtype='object') |
| 1716 | + ) |
1721 | 1717 |
|
1722 | 1718 | >>> mi[2:]
|
1723 | 1719 | MultiIndex([(1, 'a'),
|
1724 | 1720 | (1, 'b')],
|
1725 |
| - dtype='object') |
| 1721 | + ) |
1726 | 1722 |
|
1727 | 1723 | The 0 from the first level is not represented
|
1728 | 1724 | and can be removed
|
@@ -2039,12 +2035,13 @@ def swaplevel(self, i=-2, j=-1):
|
2039 | 2035 | ('a', 'aa'),
|
2040 | 2036 | ('b', 'bb'),
|
2041 | 2037 | ('b', 'aa')],
|
2042 |
| - dtype='object') |
| 2038 | + ) |
2043 | 2039 | >>> mi.swaplevel(0, 1)
|
2044 | 2040 | MultiIndex([('bb', 'a'),
|
2045 | 2041 | ('aa', 'a'),
|
2046 | 2042 | ('bb', 'b'),
|
2047 | 2043 | ('aa', 'b')],
|
| 2044 | + ) |
2048 | 2045 | """
|
2049 | 2046 | new_levels = list(self.levels)
|
2050 | 2047 | new_codes = list(self.codes)
|
|
0 commit comments