86 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import numpy as np
 | 
						|
import pytest
 | 
						|
 | 
						|
from pandas import (
 | 
						|
    DataFrame,
 | 
						|
    DatetimeIndex,
 | 
						|
    PeriodIndex,
 | 
						|
    Series,
 | 
						|
    date_range,
 | 
						|
    period_range,
 | 
						|
)
 | 
						|
import pandas._testing as tm
 | 
						|
 | 
						|
 | 
						|
class TestToPeriod:
 | 
						|
    def test_to_period(self, frame_or_series):
 | 
						|
        K = 5
 | 
						|
 | 
						|
        dr = date_range("1/1/2000", "1/1/2001", freq="D")
 | 
						|
        obj = DataFrame(
 | 
						|
            np.random.randn(len(dr), K), index=dr, columns=["A", "B", "C", "D", "E"]
 | 
						|
        )
 | 
						|
        obj["mix"] = "a"
 | 
						|
        obj = tm.get_obj(obj, frame_or_series)
 | 
						|
 | 
						|
        pts = obj.to_period()
 | 
						|
        exp = obj.copy()
 | 
						|
        exp.index = period_range("1/1/2000", "1/1/2001")
 | 
						|
        tm.assert_equal(pts, exp)
 | 
						|
 | 
						|
        pts = obj.to_period("M")
 | 
						|
        exp.index = exp.index.asfreq("M")
 | 
						|
        tm.assert_equal(pts, exp)
 | 
						|
 | 
						|
    def test_to_period_without_freq(self, frame_or_series):
 | 
						|
        # GH#7606 without freq
 | 
						|
        idx = DatetimeIndex(["2011-01-01", "2011-01-02", "2011-01-03", "2011-01-04"])
 | 
						|
        exp_idx = PeriodIndex(
 | 
						|
            ["2011-01-01", "2011-01-02", "2011-01-03", "2011-01-04"], freq="D"
 | 
						|
        )
 | 
						|
 | 
						|
        obj = DataFrame(np.random.randn(4, 4), index=idx, columns=idx)
 | 
						|
        obj = tm.get_obj(obj, frame_or_series)
 | 
						|
        expected = obj.copy()
 | 
						|
        expected.index = exp_idx
 | 
						|
        tm.assert_equal(obj.to_period(), expected)
 | 
						|
 | 
						|
        if frame_or_series is DataFrame:
 | 
						|
            expected = obj.copy()
 | 
						|
            expected.columns = exp_idx
 | 
						|
            tm.assert_frame_equal(obj.to_period(axis=1), expected)
 | 
						|
 | 
						|
    def test_to_period_columns(self):
 | 
						|
        dr = date_range("1/1/2000", "1/1/2001")
 | 
						|
        df = DataFrame(np.random.randn(len(dr), 5), index=dr)
 | 
						|
        df["mix"] = "a"
 | 
						|
 | 
						|
        df = df.T
 | 
						|
        pts = df.to_period(axis=1)
 | 
						|
        exp = df.copy()
 | 
						|
        exp.columns = period_range("1/1/2000", "1/1/2001")
 | 
						|
        tm.assert_frame_equal(pts, exp)
 | 
						|
 | 
						|
        pts = df.to_period("M", axis=1)
 | 
						|
        tm.assert_index_equal(pts.columns, exp.columns.asfreq("M"))
 | 
						|
 | 
						|
    def test_to_period_invalid_axis(self):
 | 
						|
        dr = date_range("1/1/2000", "1/1/2001")
 | 
						|
        df = DataFrame(np.random.randn(len(dr), 5), index=dr)
 | 
						|
        df["mix"] = "a"
 | 
						|
 | 
						|
        msg = "No axis named 2 for object type DataFrame"
 | 
						|
        with pytest.raises(ValueError, match=msg):
 | 
						|
            df.to_period(axis=2)
 | 
						|
 | 
						|
    def test_to_period_raises(self, index, frame_or_series):
 | 
						|
        # https://github.com/pandas-dev/pandas/issues/33327
 | 
						|
        obj = Series(index=index, dtype=object)
 | 
						|
        if frame_or_series is DataFrame:
 | 
						|
            obj = obj.to_frame()
 | 
						|
 | 
						|
        if not isinstance(index, DatetimeIndex):
 | 
						|
            msg = f"unsupported Type {type(index).__name__}"
 | 
						|
            with pytest.raises(TypeError, match=msg):
 | 
						|
                obj.to_period()
 |