@@ -403,6 +403,7 @@ def maybe_convert_objects(ndarray[object] objects, bint try_float=0,
403
403
bint seen_bool = 0
404
404
bint seen_object = 0
405
405
bint seen_null = 0
406
+ bint seen_numeric = 0
406
407
object val, onan
407
408
float64_t fval, fnan
408
409
@@ -437,12 +438,17 @@ def maybe_convert_objects(ndarray[object] objects, bint try_float=0,
437
438
else :
438
439
seen_object = 1
439
440
# objects[i] = val.astype('O')
441
+ break
440
442
elif util.is_integer_object(val):
441
443
seen_int = 1
442
444
floats[i] = < float64_t> val
443
445
complexes[i] = < double complex > val
444
446
if not seen_null:
445
- ints[i] = val
447
+ try :
448
+ ints[i] = val
449
+ except OverflowError :
450
+ seen_object = 1
451
+ break
446
452
elif util.is_complex_object(val):
447
453
complexes[i] = val
448
454
seen_complex = 1
@@ -452,6 +458,7 @@ def maybe_convert_objects(ndarray[object] objects, bint try_float=0,
452
458
idatetimes[i] = convert_to_tsobject(val, None ).value
453
459
else :
454
460
seen_object = 1
461
+ break
455
462
elif try_float and not util.is_string_object(val):
456
463
# this will convert Decimal objects
457
464
try :
@@ -460,72 +467,63 @@ def maybe_convert_objects(ndarray[object] objects, bint try_float=0,
460
467
seen_float = 1
461
468
except Exception :
462
469
seen_object = 1
470
+ break
463
471
else :
464
472
seen_object = 1
473
+ break
474
+
475
+ seen_numeric = seen_complex or seen_float or seen_int
476
+
477
+ if not seen_object:
465
478
466
- if not safe:
467
- if seen_null:
468
- if (seen_float or seen_int) and not seen_object:
479
+ if not safe:
480
+ if seen_null:
469
481
if seen_complex:
470
482
return complexes
471
- else :
483
+ elif seen_float or seen_int :
472
484
return floats
473
485
else :
474
- return objects
475
- else :
476
- if seen_object:
477
- return objects
478
- elif not seen_bool:
479
- if seen_datetime:
480
- if seen_complex or seen_float or seen_int:
481
- return objects
486
+ if not seen_bool:
487
+ if seen_datetime:
488
+ if not seen_numeric:
489
+ return datetimes
482
490
else :
483
- return datetimes
484
- else :
485
- if seen_complex:
486
- return complexes
487
- elif seen_float:
488
- return floats
489
- elif seen_int:
490
- return ints
491
- else :
492
- if not seen_float and not seen_int:
491
+ if seen_complex:
492
+ return complexes
493
+ elif seen_float:
494
+ return floats
495
+ elif seen_int:
496
+ return ints
497
+ elif not seen_datetime and not seen_numeric:
493
498
return bools.view(np.bool_)
494
499
495
- return objects
496
- else :
497
- # don't cast int to float, etc.
498
- if seen_null:
499
- if (seen_float or seen_int) and not seen_object:
500
- if seen_complex:
501
- return complexes
502
- else :
503
- return floats
504
- else :
505
- return objects
506
500
else :
507
- if seen_object:
508
- return objects
509
- elif not seen_bool:
510
- if seen_datetime:
511
- if seen_complex or seen_float or seen_int:
512
- return objects
513
- else :
514
- return datetimes
515
- else :
516
- if seen_int and seen_float:
517
- return objects
518
- elif seen_complex:
501
+ # don't cast int to float, etc.
502
+ if seen_null:
503
+ if seen_complex:
504
+ if not seen_int:
519
505
return complexes
520
- elif seen_float:
506
+ elif seen_float:
507
+ if not seen_int:
521
508
return floats
522
- elif seen_int:
523
- return ints
524
509
else :
525
- if not seen_float and not seen_int:
510
+ if not seen_bool:
511
+ if seen_datetime:
512
+ if not seen_numeric:
513
+ return datetimes
514
+ else :
515
+ if seen_complex:
516
+ if not seen_int:
517
+ return complexes
518
+ elif seen_float:
519
+ if not seen_int:
520
+ return floats
521
+ elif seen_int:
522
+ return ints
523
+ elif not seen_datetime and not seen_numeric:
526
524
return bools.view(np.bool_)
527
525
528
- return objects
526
+ return objects
529
527
530
528
531
529
def convert_sql_column (x ):
0 commit comments