55 lines
2.0 KiB
Python
55 lines
2.0 KiB
Python
import numpy as np
|
|
import pytest
|
|
|
|
from pandas import DataFrame, Series
|
|
import pandas._testing as tm
|
|
|
|
|
|
class TestConvert:
|
|
def test_convert_objects(self, float_string_frame):
|
|
|
|
oops = float_string_frame.T.T
|
|
converted = oops._convert(datetime=True)
|
|
tm.assert_frame_equal(converted, float_string_frame)
|
|
assert converted["A"].dtype == np.float64
|
|
|
|
# force numeric conversion
|
|
float_string_frame["H"] = "1."
|
|
float_string_frame["I"] = "1"
|
|
|
|
# add in some items that will be nan
|
|
length = len(float_string_frame)
|
|
float_string_frame["J"] = "1."
|
|
float_string_frame["K"] = "1"
|
|
float_string_frame.loc[float_string_frame.index[0:5], ["J", "K"]] = "garbled"
|
|
converted = float_string_frame._convert(datetime=True, numeric=True)
|
|
assert converted["H"].dtype == "float64"
|
|
assert converted["I"].dtype == "int64"
|
|
assert converted["J"].dtype == "float64"
|
|
assert converted["K"].dtype == "float64"
|
|
assert len(converted["J"].dropna()) == length - 5
|
|
assert len(converted["K"].dropna()) == length - 5
|
|
|
|
# via astype
|
|
converted = float_string_frame.copy()
|
|
converted["H"] = converted["H"].astype("float64")
|
|
converted["I"] = converted["I"].astype("int64")
|
|
assert converted["H"].dtype == "float64"
|
|
assert converted["I"].dtype == "int64"
|
|
|
|
# via astype, but errors
|
|
converted = float_string_frame.copy()
|
|
with pytest.raises(ValueError, match="invalid literal"):
|
|
converted["H"].astype("int32")
|
|
|
|
# mixed in a single column
|
|
df = DataFrame({"s": Series([1, "na", 3, 4])})
|
|
result = df._convert(datetime=True, numeric=True)
|
|
expected = DataFrame({"s": Series([1, np.nan, 3, 4])})
|
|
tm.assert_frame_equal(result, expected)
|
|
|
|
def test_convert_objects_no_conversion(self):
|
|
mixed1 = DataFrame({"a": [1, 2, 3], "b": [4.0, 5, 6], "c": ["x", "y", "z"]})
|
|
mixed2 = mixed1._convert(datetime=True)
|
|
tm.assert_frame_equal(mixed1, mixed2)
|