Skip to content

Commit bd5e897

Browse files
committed
refactoring
adds Type Hints removes now unnecessary code for selecting slices uses iloc access replaces list comprehension by loop
1 parent 16554c6 commit bd5e897

File tree

1 file changed

+17
-22
lines changed

1 file changed

+17
-22
lines changed

pandas/core/frame.py

+17-22
Original file line numberDiff line numberDiff line change
@@ -3455,15 +3455,6 @@ def select_dtypes(self, include=None, exclude=None):
34553455
5 False 2.0
34563456
"""
34573457

3458-
def _get_info_slice(obj, indexer):
3459-
"""Slice the info axis of `obj` with `indexer`."""
3460-
if not hasattr(obj, "_info_axis_number"):
3461-
msg = "object of type {typ!r} has no info axis"
3462-
raise TypeError(msg.format(typ=type(obj).__name__))
3463-
slices = [slice(None)] * obj.ndim
3464-
slices[obj._info_axis_number] = indexer
3465-
return tuple(slices)
3466-
34673458
if not is_list_like(include):
34683459
include = (include,) if include is not None else ()
34693460
if not is_list_like(exclude):
@@ -3491,27 +3482,31 @@ def _get_info_slice(obj, indexer):
34913482
# We raise when both include and exclude are empty
34923483
# Hence, we can just shrink the columns we want to keep
34933484
keep_these = Series(True, index=self.columns)
3494-
unique_dtypes = self.dtypes.unique()
34953485

3496-
def filter_unique_dtypes_on(selection, unqiue_dtypes):
3497-
result = [
3498-
dtype
3499-
for dtype in unique_dtypes
3500-
if any(
3501-
issubclass(dtype.type, selected_type) for selected_type in selection
3502-
)
3503-
]
3504-
return result
3486+
def extract_unique_dtypes_from_dtypes_list(
3487+
dtypes_list: List[Type], unique_dtypes: List[Type]
3488+
) -> List[Type]:
3489+
extracted_dtypes = []
3490+
for unique_dtype in unique_dtypes:
3491+
if any(issubclass(unique_dtype.type, dtype) for dtype in dtypes_list):
3492+
extracted_dtypes.append(unique_dtype)
3493+
return extracted_dtypes
3494+
3495+
unique_dtypes = self.dtypes.unique()
35053496

35063497
if include:
3507-
included_dtypes = filter_unique_dtypes_on(include, unique_dtypes)
3498+
included_dtypes = extract_unique_dtypes_from_dtypes_list(
3499+
include, unique_dtypes
3500+
)
35083501
keep_these &= self.dtypes.isin(included_dtypes)
35093502

35103503
if exclude:
3511-
excluded_dtypes = filter_unique_dtypes_on(exclude, unique_dtypes)
3504+
excluded_dtypes = extract_unique_dtypes_from_dtypes_list(
3505+
exclude, unique_dtypes
3506+
)
35123507
keep_these &= ~self.dtypes.isin(excluded_dtypes)
35133508

3514-
return self.loc[_get_info_slice(self, keep_these)]
3509+
return self.iloc[:, keep_these.values]
35153510

35163511
def insert(self, loc, column, value, allow_duplicates=False):
35173512
"""

0 commit comments

Comments
 (0)