diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 66399f2b9a5e4..d1be336204593 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -1844,7 +1844,11 @@ def from_records( columns = ensure_index(columns) arr_columns = columns else: - arrays, arr_columns = to_arrays(data, columns, coerce_float=coerce_float) + arrays, arr_columns = to_arrays(data, columns) + if coerce_float: + for i, arr in enumerate(arrays): + if arr.dtype == object: + arrays[i] = lib.maybe_convert_objects(arr, try_float=True) arr_columns = ensure_index(arr_columns) if columns is not None: diff --git a/pandas/core/internals/construction.py b/pandas/core/internals/construction.py index bc8e75ceef87b..ec3190d2c86f9 100644 --- a/pandas/core/internals/construction.py +++ b/pandas/core/internals/construction.py @@ -500,9 +500,7 @@ def dataclasses_to_dicts(data): # Conversion of Inputs to Arrays -def to_arrays( - data, columns, coerce_float: bool = False, dtype: Optional[DtypeObj] = None -): +def to_arrays(data, columns, dtype: Optional[DtypeObj] = None): """ Return list of arrays, columns. """ @@ -548,7 +546,7 @@ def to_arrays( data = [tuple(x) for x in data] content, columns = _list_to_arrays(data, columns) - content, columns = _finalize_columns_and_data(content, columns, dtype, coerce_float) + content, columns = _finalize_columns_and_data(content, columns, dtype) return content, columns @@ -635,7 +633,6 @@ def _finalize_columns_and_data( content: np.ndarray, columns: Optional[Union[Index, List]], dtype: Optional[DtypeObj], - coerce_float: bool, ) -> Tuple[List[np.ndarray], Union[Index, List[Axis]]]: """ Ensure we have valid columns, cast object dtypes if possible. @@ -649,7 +646,7 @@ def _finalize_columns_and_data( raise ValueError(err) from err if len(content) and content[0].dtype == np.object_: - content = _convert_object_array(content, dtype=dtype, coerce_float=coerce_float) + content = _convert_object_array(content, dtype=dtype) return content, columns @@ -712,7 +709,7 @@ def _validate_or_indexify_columns( def _convert_object_array( - content: List[Scalar], coerce_float: bool = False, dtype: Optional[DtypeObj] = None + content: List[Scalar], dtype: Optional[DtypeObj] = None ) -> List[Scalar]: """ Internal function ot convert object array. @@ -720,7 +717,6 @@ def _convert_object_array( Parameters ---------- content: list of processed data records - coerce_float: bool, to coerce floats or not, default is False dtype: np.dtype, default is None Returns @@ -730,7 +726,7 @@ def _convert_object_array( # provide soft conversion of object dtypes def convert(arr): if dtype != np.dtype("O"): - arr = lib.maybe_convert_objects(arr, try_float=coerce_float) + arr = lib.maybe_convert_objects(arr) arr = maybe_cast_to_datetime(arr, dtype) return arr