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