|
9 | 9 |
|
10 | 10 | from pandas.core.base import PandasObject
|
11 | 11 |
|
12 |
| -from pandas.types.dtypes import DatetimeTZDtype, CategoricalDtype |
| 12 | +from pandas.types.dtypes import (ExtensionDtype, DatetimeTZDtype, |
| 13 | + CategoricalDtype) |
13 | 14 | from pandas.types.common import (_TD_DTYPE, _NS_DTYPE,
|
14 | 15 | _ensure_int64, _ensure_platform_int,
|
15 | 16 | is_integer,
|
@@ -4496,55 +4497,13 @@ def _interleaved_dtype(blocks):
|
4496 | 4497 | if not len(blocks):
|
4497 | 4498 | return None
|
4498 | 4499 |
|
4499 |
| - counts = defaultdict(list) |
4500 |
| - for x in blocks: |
4501 |
| - counts[type(x)].append(x) |
4502 |
| - |
4503 |
| - have_int = len(counts[IntBlock]) > 0 |
4504 |
| - have_bool = len(counts[BoolBlock]) > 0 |
4505 |
| - have_object = len(counts[ObjectBlock]) > 0 |
4506 |
| - have_float = len(counts[FloatBlock]) > 0 |
4507 |
| - have_complex = len(counts[ComplexBlock]) > 0 |
4508 |
| - have_dt64 = len(counts[DatetimeBlock]) > 0 |
4509 |
| - have_dt64_tz = len(counts[DatetimeTZBlock]) > 0 |
4510 |
| - have_td64 = len(counts[TimeDeltaBlock]) > 0 |
4511 |
| - have_cat = len(counts[CategoricalBlock]) > 0 |
4512 |
| - # TODO: have_sparse is not used |
4513 |
| - have_sparse = len(counts[SparseBlock]) > 0 # noqa |
4514 |
| - have_numeric = have_float or have_complex or have_int |
4515 |
| - has_non_numeric = have_dt64 or have_dt64_tz or have_td64 or have_cat |
4516 |
| - |
4517 |
| - if (have_object or |
4518 |
| - (have_bool and |
4519 |
| - (have_numeric or have_dt64 or have_dt64_tz or have_td64)) or |
4520 |
| - (have_numeric and has_non_numeric) or have_cat or have_dt64 or |
4521 |
| - have_dt64_tz or have_td64): |
4522 |
| - return np.dtype(object) |
4523 |
| - elif have_bool: |
4524 |
| - return np.dtype(bool) |
4525 |
| - elif have_int and not have_float and not have_complex: |
4526 |
| - # if we are mixing unsigned and signed, then return |
4527 |
| - # the next biggest int type (if we can) |
4528 |
| - lcd = _find_common_type([b.dtype for b in counts[IntBlock]]) |
4529 |
| - kinds = set([i.dtype.kind for i in counts[IntBlock]]) |
4530 |
| - if len(kinds) == 1: |
4531 |
| - return lcd |
4532 |
| - |
4533 |
| - if lcd == 'uint64' or lcd == 'int64': |
4534 |
| - return np.dtype('int64') |
4535 |
| - |
4536 |
| - # return 1 bigger on the itemsize if unsinged |
4537 |
| - if lcd.kind == 'u': |
4538 |
| - return np.dtype('int%s' % (lcd.itemsize * 8 * 2)) |
4539 |
| - return lcd |
4540 |
| - |
4541 |
| - elif have_int and have_float and not have_complex: |
4542 |
| - return np.dtype('float64') |
4543 |
| - elif have_complex: |
4544 |
| - return np.dtype('c16') |
4545 |
| - else: |
4546 |
| - introspection_blks = counts[FloatBlock] + counts[SparseBlock] |
4547 |
| - return _find_common_type([b.dtype for b in introspection_blks]) |
| 4500 | + dtype = _find_common_type([b.dtype for b in blocks]) |
| 4501 | + |
| 4502 | + # only numpy compat |
| 4503 | + if isinstance(dtype, ExtensionDtype): |
| 4504 | + dtype = np.object |
| 4505 | + |
| 4506 | + return dtype |
4548 | 4507 |
|
4549 | 4508 |
|
4550 | 4509 | def _consolidate(blocks):
|
|
0 commit comments