From c7288f118be00947cc8d016cdfce289caa167718 Mon Sep 17 00:00:00 2001 From: tp Date: Fri, 3 Jul 2020 23:04:08 +0100 Subject: [PATCH 1/2] CLN: Index._format_with_header (remove kwargs etc.) --- pandas/core/indexes/base.py | 27 ++++++++++++++++----------- pandas/core/indexes/category.py | 9 +++++++++ pandas/core/indexes/datetimelike.py | 4 ++-- pandas/core/indexes/interval.py | 6 +++--- pandas/core/indexes/range.py | 4 ++-- 5 files changed, 32 insertions(+), 18 deletions(-) diff --git a/pandas/core/indexes/base.py b/pandas/core/indexes/base.py index b12a556a8291d..2f12a2e4c27ea 100644 --- a/pandas/core/indexes/base.py +++ b/pandas/core/indexes/base.py @@ -2,7 +2,16 @@ from datetime import datetime import operator from textwrap import dedent -from typing import TYPE_CHECKING, Any, Callable, FrozenSet, Hashable, Optional, Union +from typing import ( + TYPE_CHECKING, + Any, + Callable, + FrozenSet, + Hashable, + List, + Optional, + Union, +) import warnings import numpy as np @@ -910,15 +919,12 @@ def format(self, name: bool = False, formatter=None, **kwargs): return self._format_with_header(header, **kwargs) - def _format_with_header(self, header, na_rep="NaN", **kwargs): - values = self._values - + def _format_with_header(self, header, na_rep="NaN") -> List[str_t]: from pandas.io.formats.format import format_array - if is_categorical_dtype(values.dtype): - values = np.array(values) + values = self._values - elif is_object_dtype(values.dtype): + if is_object_dtype(values.dtype): values = lib.maybe_convert_objects(values, safe=1) if is_object_dtype(values.dtype): @@ -929,10 +935,9 @@ def _format_with_header(self, header, na_rep="NaN", **kwargs): if mask.any(): result = np.array(result) result[mask] = na_rep - result = result.tolist() - + result = result.tolist() # type: ignore else: - result = _trim_front(format_array(values, None, justify="left")) + result = trim_front(format_array(values, None, justify="left")) return header + result def to_native_types(self, slicer=None, **kwargs): @@ -5611,7 +5616,7 @@ def ensure_has_len(seq): return seq -def _trim_front(strings): +def trim_front(strings: List[str]) -> List[str]: """ Trims zeros and decimal points. """ diff --git a/pandas/core/indexes/category.py b/pandas/core/indexes/category.py index 2a79c83de7ef2..b0b008de69a94 100644 --- a/pandas/core/indexes/category.py +++ b/pandas/core/indexes/category.py @@ -347,6 +347,15 @@ def _format_attrs(self): attrs.append(("length", len(self))) return attrs + def _format_with_header(self, header, na_rep="NaN") -> List[str]: + from pandas.io.formats.format import format_array + + formatted_values = format_array( + self._values, formatter=None, na_rep=na_rep, justify="left" + ) + result = ibase.trim_front(formatted_values) + return header + result + # -------------------------------------------------------------------- @property diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 49b8ec3276e37..4d527e797b64d 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -338,8 +338,8 @@ def argmax(self, axis=None, skipna=True, *args, **kwargs): # -------------------------------------------------------------------- # Rendering Methods - def _format_with_header(self, header, na_rep="NaT", **kwargs): - return header + list(self._format_native_types(na_rep, **kwargs)) + def _format_with_header(self, header, na_rep="NaT") -> List[str]: + return header + list(self._format_native_types(na_rep=na_rep)) @property def _formatter_func(self): diff --git a/pandas/core/indexes/interval.py b/pandas/core/indexes/interval.py index f7a7b382b853f..9548ebbd9c3b2 100644 --- a/pandas/core/indexes/interval.py +++ b/pandas/core/indexes/interval.py @@ -1,7 +1,7 @@ """ define the IntervalIndex """ from operator import le, lt import textwrap -from typing import Any, Optional, Tuple, Union +from typing import Any, List, Optional, Tuple, Union import numpy as np @@ -948,8 +948,8 @@ def take(self, indices, axis=0, allow_fill=True, fill_value=None, **kwargs): # Rendering Methods # __repr__ associated methods are based on MultiIndex - def _format_with_header(self, header, **kwargs): - return header + list(self._format_native_types(**kwargs)) + def _format_with_header(self, header, na_rep="NaN") -> List[str]: + return header + list(self._format_native_types(na_rep=na_rep)) def _format_native_types(self, na_rep="NaN", quoting=None, **kwargs): # GH 28210: use base method but with different default na_rep diff --git a/pandas/core/indexes/range.py b/pandas/core/indexes/range.py index 49a0f0fb7ae92..6d9fd6efe54a3 100644 --- a/pandas/core/indexes/range.py +++ b/pandas/core/indexes/range.py @@ -1,7 +1,7 @@ from datetime import timedelta import operator from sys import getsizeof -from typing import Any, Optional +from typing import Any, List, Optional import warnings import numpy as np @@ -197,7 +197,7 @@ def _format_data(self, name=None): # we are formatting thru the attributes return None - def _format_with_header(self, header, na_rep="NaN", **kwargs): + def _format_with_header(self, header, na_rep="NaN") -> List[str]: return header + list(map(pprint_thing, self._range)) # -------------------------------------------------------------------- From 2d64e943bc491eaf35497278d2a79880026bc659 Mon Sep 17 00:00:00 2001 From: tp Date: Sat, 4 Jul 2020 00:04:31 +0100 Subject: [PATCH 2/2] fixes to errors --- pandas/core/indexes/datetimelike.py | 6 ++++-- pandas/io/formats/style.py | 5 ++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/pandas/core/indexes/datetimelike.py b/pandas/core/indexes/datetimelike.py index 4d527e797b64d..7be6aa50fa16b 100644 --- a/pandas/core/indexes/datetimelike.py +++ b/pandas/core/indexes/datetimelike.py @@ -338,8 +338,10 @@ def argmax(self, axis=None, skipna=True, *args, **kwargs): # -------------------------------------------------------------------- # Rendering Methods - def _format_with_header(self, header, na_rep="NaT") -> List[str]: - return header + list(self._format_native_types(na_rep=na_rep)) + def _format_with_header(self, header, na_rep="NaT", date_format=None) -> List[str]: + return header + list( + self._format_native_types(na_rep=na_rep, date_format=date_format) + ) @property def _formatter_func(self): diff --git a/pandas/io/formats/style.py b/pandas/io/formats/style.py index f7ba4750bc2ad..6250e99252928 100644 --- a/pandas/io/formats/style.py +++ b/pandas/io/formats/style.py @@ -1524,7 +1524,10 @@ def _get_level_lengths(index, hidden_elements=None): Result is a dictionary of (level, initial_position): span """ - levels = index.format(sparsify=lib.no_default, adjoin=False, names=False) + if isinstance(index, pd.MultiIndex): + levels = index.format(sparsify=lib.no_default, adjoin=False) + else: + levels = index.format() if hidden_elements is None: hidden_elements = []