|
5 | 5 | import numpy as np
|
6 | 6 | import warnings
|
7 | 7 |
|
8 |
| -import pandas as pd |
9 | 8 | from pandas._libs import tslib, lib
|
10 | 9 | from pandas._libs.tslib import iNaT
|
11 | 10 | from pandas.compat import string_types, text_type, PY3
|
|
19 | 18 | is_integer_dtype,
|
20 | 19 | is_datetime_or_timedelta_dtype,
|
21 | 20 | is_bool_dtype, is_scalar,
|
22 |
| - is_numeric_dtype, is_decimal, |
23 |
| - is_number, |
24 | 21 | _string_dtypes,
|
25 | 22 | _coerce_to_dtype,
|
26 | 23 | pandas_dtype,
|
|
30 | 27 | _POSSIBLY_CAST_DTYPES)
|
31 | 28 | from .dtypes import ExtensionDtype, DatetimeTZDtype, PeriodDtype
|
32 | 29 | from .generic import (ABCDatetimeIndex, ABCPeriodIndex,
|
33 |
| - ABCSeries, ABCIndexClass) |
| 30 | + ABCSeries) |
34 | 31 | from .missing import isnull, notnull
|
35 | 32 | from .inference import is_list_like
|
36 | 33 |
|
@@ -549,7 +546,7 @@ def coerce_to_dtypes(result, dtypes):
|
549 | 546 | if len(result) != len(dtypes):
|
550 | 547 | raise AssertionError("_coerce_to_dtypes requires equal len arrays")
|
551 | 548 |
|
552 |
| - from pandas.tseries.timedeltas import _coerce_scalar_to_timedelta_type |
| 549 | + from pandas.core.tools.timedeltas import _coerce_scalar_to_timedelta_type |
553 | 550 |
|
554 | 551 | def conv(r, dtype):
|
555 | 552 | try:
|
@@ -671,7 +668,7 @@ def maybe_convert_objects(values, convert_dates=True, convert_numeric=True,
|
671 | 668 | if convert_timedeltas and values.dtype == np.object_:
|
672 | 669 |
|
673 | 670 | if convert_timedeltas == 'coerce':
|
674 |
| - from pandas.tseries.timedeltas import to_timedelta |
| 671 | + from pandas.core.tools.timedeltas import to_timedelta |
675 | 672 | new_values = to_timedelta(values, coerce=True)
|
676 | 673 |
|
677 | 674 | # if we are all nans then leave me alone
|
@@ -873,8 +870,8 @@ def maybe_cast_to_datetime(value, dtype, errors='raise'):
|
873 | 870 | """ try to cast the array/value to a datetimelike dtype, converting float
|
874 | 871 | nan to iNaT
|
875 | 872 | """
|
876 |
| - from pandas.tseries.timedeltas import to_timedelta |
877 |
| - from pandas.tseries.tools import to_datetime |
| 873 | + from pandas.core.tools.timedeltas import to_timedelta |
| 874 | + from pandas.core.tools.datetimes import to_datetime |
878 | 875 |
|
879 | 876 | if dtype is not None:
|
880 | 877 | if isinstance(dtype, string_types):
|
@@ -1030,161 +1027,3 @@ def find_common_type(types):
|
1030 | 1027 | return np.object
|
1031 | 1028 |
|
1032 | 1029 | return np.find_common_type(types, [])
|
1033 |
| - |
1034 |
| - |
1035 |
| -def to_numeric(arg, errors='raise', downcast=None): |
1036 |
| - """ |
1037 |
| - Convert argument to a numeric type. |
1038 |
| -
|
1039 |
| - Parameters |
1040 |
| - ---------- |
1041 |
| - arg : list, tuple, 1-d array, or Series |
1042 |
| - errors : {'ignore', 'raise', 'coerce'}, default 'raise' |
1043 |
| - - If 'raise', then invalid parsing will raise an exception |
1044 |
| - - If 'coerce', then invalid parsing will be set as NaN |
1045 |
| - - If 'ignore', then invalid parsing will return the input |
1046 |
| - downcast : {'integer', 'signed', 'unsigned', 'float'} , default None |
1047 |
| - If not None, and if the data has been successfully cast to a |
1048 |
| - numerical dtype (or if the data was numeric to begin with), |
1049 |
| - downcast that resulting data to the smallest numerical dtype |
1050 |
| - possible according to the following rules: |
1051 |
| -
|
1052 |
| - - 'integer' or 'signed': smallest signed int dtype (min.: np.int8) |
1053 |
| - - 'unsigned': smallest unsigned int dtype (min.: np.uint8) |
1054 |
| - - 'float': smallest float dtype (min.: np.float32) |
1055 |
| -
|
1056 |
| - As this behaviour is separate from the core conversion to |
1057 |
| - numeric values, any errors raised during the downcasting |
1058 |
| - will be surfaced regardless of the value of the 'errors' input. |
1059 |
| -
|
1060 |
| - In addition, downcasting will only occur if the size |
1061 |
| - of the resulting data's dtype is strictly larger than |
1062 |
| - the dtype it is to be cast to, so if none of the dtypes |
1063 |
| - checked satisfy that specification, no downcasting will be |
1064 |
| - performed on the data. |
1065 |
| -
|
1066 |
| - .. versionadded:: 0.19.0 |
1067 |
| -
|
1068 |
| - Returns |
1069 |
| - ------- |
1070 |
| - ret : numeric if parsing succeeded. |
1071 |
| - Return type depends on input. Series if Series, otherwise ndarray |
1072 |
| -
|
1073 |
| - Examples |
1074 |
| - -------- |
1075 |
| - Take separate series and convert to numeric, coercing when told to |
1076 |
| -
|
1077 |
| - >>> import pandas as pd |
1078 |
| - >>> s = pd.Series(['1.0', '2', -3]) |
1079 |
| - >>> pd.to_numeric(s) |
1080 |
| - 0 1.0 |
1081 |
| - 1 2.0 |
1082 |
| - 2 -3.0 |
1083 |
| - dtype: float64 |
1084 |
| - >>> pd.to_numeric(s, downcast='float') |
1085 |
| - 0 1.0 |
1086 |
| - 1 2.0 |
1087 |
| - 2 -3.0 |
1088 |
| - dtype: float32 |
1089 |
| - >>> pd.to_numeric(s, downcast='signed') |
1090 |
| - 0 1 |
1091 |
| - 1 2 |
1092 |
| - 2 -3 |
1093 |
| - dtype: int8 |
1094 |
| - >>> s = pd.Series(['apple', '1.0', '2', -3]) |
1095 |
| - >>> pd.to_numeric(s, errors='ignore') |
1096 |
| - 0 apple |
1097 |
| - 1 1.0 |
1098 |
| - 2 2 |
1099 |
| - 3 -3 |
1100 |
| - dtype: object |
1101 |
| - >>> pd.to_numeric(s, errors='coerce') |
1102 |
| - 0 NaN |
1103 |
| - 1 1.0 |
1104 |
| - 2 2.0 |
1105 |
| - 3 -3.0 |
1106 |
| - dtype: float64 |
1107 |
| - """ |
1108 |
| - if downcast not in (None, 'integer', 'signed', 'unsigned', 'float'): |
1109 |
| - raise ValueError('invalid downcasting method provided') |
1110 |
| - |
1111 |
| - is_series = False |
1112 |
| - is_index = False |
1113 |
| - is_scalars = False |
1114 |
| - |
1115 |
| - if isinstance(arg, ABCSeries): |
1116 |
| - is_series = True |
1117 |
| - values = arg.values |
1118 |
| - elif isinstance(arg, ABCIndexClass): |
1119 |
| - is_index = True |
1120 |
| - values = arg.asi8 |
1121 |
| - if values is None: |
1122 |
| - values = arg.values |
1123 |
| - elif isinstance(arg, (list, tuple)): |
1124 |
| - values = np.array(arg, dtype='O') |
1125 |
| - elif is_scalar(arg): |
1126 |
| - if is_decimal(arg): |
1127 |
| - return float(arg) |
1128 |
| - if is_number(arg): |
1129 |
| - return arg |
1130 |
| - is_scalars = True |
1131 |
| - values = np.array([arg], dtype='O') |
1132 |
| - elif getattr(arg, 'ndim', 1) > 1: |
1133 |
| - raise TypeError('arg must be a list, tuple, 1-d array, or Series') |
1134 |
| - else: |
1135 |
| - values = arg |
1136 |
| - |
1137 |
| - try: |
1138 |
| - if is_numeric_dtype(values): |
1139 |
| - pass |
1140 |
| - elif is_datetime_or_timedelta_dtype(values): |
1141 |
| - values = values.astype(np.int64) |
1142 |
| - else: |
1143 |
| - values = _ensure_object(values) |
1144 |
| - coerce_numeric = False if errors in ('ignore', 'raise') else True |
1145 |
| - values = lib.maybe_convert_numeric(values, set(), |
1146 |
| - coerce_numeric=coerce_numeric) |
1147 |
| - |
1148 |
| - except Exception: |
1149 |
| - if errors == 'raise': |
1150 |
| - raise |
1151 |
| - |
1152 |
| - # attempt downcast only if the data has been successfully converted |
1153 |
| - # to a numerical dtype and if a downcast method has been specified |
1154 |
| - if downcast is not None and is_numeric_dtype(values): |
1155 |
| - typecodes = None |
1156 |
| - |
1157 |
| - if downcast in ('integer', 'signed'): |
1158 |
| - typecodes = np.typecodes['Integer'] |
1159 |
| - elif downcast == 'unsigned' and np.min(values) >= 0: |
1160 |
| - typecodes = np.typecodes['UnsignedInteger'] |
1161 |
| - elif downcast == 'float': |
1162 |
| - typecodes = np.typecodes['Float'] |
1163 |
| - |
1164 |
| - # pandas support goes only to np.float32, |
1165 |
| - # as float dtypes smaller than that are |
1166 |
| - # extremely rare and not well supported |
1167 |
| - float_32_char = np.dtype(np.float32).char |
1168 |
| - float_32_ind = typecodes.index(float_32_char) |
1169 |
| - typecodes = typecodes[float_32_ind:] |
1170 |
| - |
1171 |
| - if typecodes is not None: |
1172 |
| - # from smallest to largest |
1173 |
| - for dtype in typecodes: |
1174 |
| - if np.dtype(dtype).itemsize <= values.dtype.itemsize: |
1175 |
| - values = maybe_downcast_to_dtype(values, dtype) |
1176 |
| - |
1177 |
| - # successful conversion |
1178 |
| - if values.dtype == dtype: |
1179 |
| - break |
1180 |
| - |
1181 |
| - if is_series: |
1182 |
| - return pd.Series(values, index=arg.index, name=arg.name) |
1183 |
| - elif is_index: |
1184 |
| - # because we want to coerce to numeric if possible, |
1185 |
| - # do not use _shallow_copy_with_infer |
1186 |
| - return pd.Index(values, name=arg.name) |
1187 |
| - elif is_scalars: |
1188 |
| - return values[0] |
1189 |
| - else: |
1190 |
| - return values |
0 commit comments