60 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.2 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")
 | 
						|
 | 
						|
    def test_convert_mixed_single_column(self):
 | 
						|
        # GH#4119, not converting a mixed type (e.g.floats and object)
 | 
						|
        # 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)
 |