@@ -1284,13 +1284,12 @@ cdef class Seen:
1284
1284
1285
1285
@property
1286
1286
def is_bool (self ):
1287
- return not (self .datetime_ or self .numeric_ or self .timedelta_
1288
- or self .nat_)
1289
-
1290
- @property
1291
- def is_float_or_complex (self ):
1292
- return not (self .bool_ or self .datetime_ or self .timedelta_
1293
- or self .nat_)
1287
+ # i.e. not (anything but bool)
1288
+ return not (
1289
+ self .datetime_ or self .datetimetz_ or self .timedelta_ or self .nat_
1290
+ or self .period_ or self .interval_
1291
+ or self .numeric_ or self .nan_ or self .null_ or self .object_
1292
+ )
1294
1293
1295
1294
1296
1295
cdef object _try_infer_map(object dtype):
@@ -2448,8 +2447,6 @@ def maybe_convert_objects(ndarray[object] objects,
2448
2447
ndarray[int64_t] ints
2449
2448
ndarray[uint64_t] uints
2450
2449
ndarray[uint8_t] bools
2451
- int64_t[::1] idatetimes
2452
- int64_t[::1] itimedeltas
2453
2450
Seen seen = Seen()
2454
2451
object val
2455
2452
float64_t fnan = np.nan
@@ -2473,14 +2470,6 @@ def maybe_convert_objects(ndarray[object] objects,
2473
2470
bools = cnp.PyArray_EMPTY(1 , objects.shape, cnp.NPY_UINT8, 0 )
2474
2471
mask = np.full(n, False )
2475
2472
2476
- if convert_datetime:
2477
- datetimes = np.empty(n, dtype = ' M8[ns]' )
2478
- idatetimes = datetimes.view(np.int64)
2479
-
2480
- if convert_timedelta:
2481
- timedeltas = np.empty(n, dtype = ' m8[ns]' )
2482
- itimedeltas = timedeltas.view(np.int64)
2483
-
2484
2473
for i in range(n ):
2485
2474
val = objects[i]
2486
2475
if itemsize_max != - 1 :
@@ -2494,10 +2483,6 @@ def maybe_convert_objects(ndarray[object] objects,
2494
2483
mask[i] = True
2495
2484
elif val is NaT:
2496
2485
seen.nat_ = True
2497
- if convert_datetime:
2498
- idatetimes[i] = NPY_NAT
2499
- if convert_timedelta:
2500
- itimedeltas[i] = NPY_NAT
2501
2486
if not (convert_datetime or convert_timedelta or convert_period):
2502
2487
seen.object_ = True
2503
2488
break
@@ -2515,7 +2500,7 @@ def maybe_convert_objects(ndarray[object] objects,
2515
2500
if convert_timedelta:
2516
2501
seen.timedelta_ = True
2517
2502
try :
2518
- itimedeltas[i] = convert_to_timedelta64(val, " ns" ).view( " i8 " )
2503
+ convert_to_timedelta64(val, " ns" )
2519
2504
except OutOfBoundsTimedelta:
2520
2505
seen.object_ = True
2521
2506
break
@@ -2556,8 +2541,7 @@ def maybe_convert_objects(ndarray[object] objects,
2556
2541
else :
2557
2542
seen.datetime_ = True
2558
2543
try :
2559
- idatetimes[i] = convert_to_tsobject(
2560
- val, None , None , 0 , 0 ).value
2544
+ convert_to_tsobject(val, None , None , 0 , 0 )
2561
2545
except OutOfBoundsDatetime:
2562
2546
seen.object_ = True
2563
2547
break
@@ -2683,76 +2667,60 @@ def maybe_convert_objects(ndarray[object] objects,
2683
2667
else :
2684
2668
seen.object_ = True
2685
2669
2670
+ if seen.bool_:
2671
+ if seen.is_bool:
2672
+ # is_bool property rules out everything else
2673
+ return bools.view(np.bool_)
2674
+ seen.object_ = True
2675
+
2686
2676
if not seen.object_:
2687
2677
result = None
2688
2678
if not safe:
2689
2679
if seen.null_ or seen.nan_:
2690
- if seen.is_float_or_complex:
2691
- if seen.complex_:
2692
- result = complexes
2693
- elif seen.float_:
2694
- result = floats
2695
- elif seen.int_:
2696
- if convert_to_nullable_integer:
2697
- from pandas.core.arrays import IntegerArray
2698
- result = IntegerArray(ints, mask)
2699
- else :
2700
- result = floats
2701
- elif seen.nan_:
2680
+ if seen.complex_:
2681
+ result = complexes
2682
+ elif seen.float_:
2683
+ result = floats
2684
+ elif seen.int_:
2685
+ if convert_to_nullable_integer:
2686
+ from pandas.core.arrays import IntegerArray
2687
+ result = IntegerArray(ints, mask)
2688
+ else :
2702
2689
result = floats
2690
+ elif seen.nan_:
2691
+ result = floats
2703
2692
else :
2704
- if not seen.bool_ :
2705
- if seen.datetime_:
2706
- if not seen.numeric_ and not seen.timedelta_ :
2707
- result = datetimes
2708
- elif seen.timedelta_ :
2709
- if not seen.numeric_ :
2710
- result = timedeltas
2693
+ if seen.complex_ :
2694
+ result = complexes
2695
+ elif seen.float_ :
2696
+ result = floats
2697
+ elif seen.int_ :
2698
+ if seen.uint_ :
2699
+ result = uints
2711
2700
else :
2712
- if seen.complex_:
2713
- result = complexes
2714
- elif seen.float_:
2715
- result = floats
2716
- elif seen.int_:
2717
- if seen.uint_:
2718
- result = uints
2719
- else :
2720
- result = ints
2721
- elif seen.is_bool:
2722
- result = bools.view(np.bool_)
2701
+ result = ints
2723
2702
2724
2703
else :
2725
2704
# don't cast int to float, etc.
2726
2705
if seen.null_:
2727
- if seen.is_float_or_complex:
2728
- if seen.complex_:
2729
- if not seen.int_:
2730
- result = complexes
2731
- elif seen.float_ or seen.nan_:
2732
- if not seen.int_:
2733
- result = floats
2706
+ if seen.complex_:
2707
+ if not seen.int_:
2708
+ result = complexes
2709
+ elif seen.float_ or seen.nan_:
2710
+ if not seen.int_:
2711
+ result = floats
2734
2712
else :
2735
- if not seen.bool_:
2736
- if seen.datetime_:
2737
- if not seen.numeric_ and not seen.timedelta_:
2738
- result = datetimes
2739
- elif seen.timedelta_:
2740
- if not seen.numeric_:
2741
- result = timedeltas
2713
+ if seen.complex_:
2714
+ if not seen.int_:
2715
+ result = complexes
2716
+ elif seen.float_ or seen.nan_:
2717
+ if not seen.int_:
2718
+ result = floats
2719
+ elif seen.int_:
2720
+ if seen.uint_:
2721
+ result = uints
2742
2722
else :
2743
- if seen.complex_:
2744
- if not seen.int_:
2745
- result = complexes
2746
- elif seen.float_ or seen.nan_:
2747
- if not seen.int_:
2748
- result = floats
2749
- elif seen.int_:
2750
- if seen.uint_:
2751
- result = uints
2752
- else :
2753
- result = ints
2754
- elif seen.is_bool and not seen.nan_:
2755
- result = bools.view(np.bool_)
2723
+ result = ints
2756
2724
2757
2725
if result is uints or result is ints or result is floats or result is complexes:
2758
2726
# cast to the largest itemsize when all values are NumPy scalars
0 commit comments