@@ -772,6 +772,67 @@ def test_to_datetime_unit(self):
772
772
result = to_datetime ([1 , 2 , 111111111 ], unit = 'D' , errors = 'coerce' )
773
773
tm .assert_index_equal (result , expected )
774
774
775
+ def test_to_datetime_origin (self ):
776
+ units = ['D' , 's' , 'ms' , 'us' , 'ns' ]
777
+ # Addresses Issue Number 11276, 11745
778
+ # for origin as julian
779
+ julian_dates = pd .date_range (
780
+ '2014-1-1' , periods = 10 ).to_julian_date ().values
781
+ result = Series (pd .to_datetime (
782
+ julian_dates , unit = 'D' , origin = 'julian' ))
783
+ expected = Series (pd .to_datetime (
784
+ julian_dates - pd .Timestamp (0 ).to_julian_date (), unit = 'D' ))
785
+ assert_series_equal (result , expected )
786
+
787
+ # checking for invalid combination of origin='julian' and unit != D
788
+ for unit in units :
789
+ if unit == 'D' :
790
+ continue
791
+ with self .assertRaises (ValueError ):
792
+ pd .to_datetime (julian_dates , unit = unit , origin = 'julian' )
793
+
794
+ # for origin as 1960-01-01
795
+ epoch_1960 = pd .Timestamp ('1960-01-01' )
796
+ epoch_timestamp_convertible = [epoch_1960 , epoch_1960 .to_datetime (),
797
+ epoch_1960 .to_datetime64 (),
798
+ str (epoch_1960 )]
799
+ invalid_origins = ['random_string' , '13-24-1990' ]
800
+ units_from_epoch = [0 , 1 , 2 , 3 , 4 ]
801
+
802
+ for unit in units :
803
+ for epoch in epoch_timestamp_convertible :
804
+ expected = Series (
805
+ [pd .Timedelta (x , unit = unit ) +
806
+ epoch_1960 for x in units_from_epoch ])
807
+ result = Series (pd .to_datetime (
808
+ units_from_epoch , unit = unit , origin = epoch ))
809
+ assert_series_equal (result , expected )
810
+
811
+ # check for invalid origins
812
+ for origin in invalid_origins :
813
+
814
+ # errors = 'raise'
815
+ with self .assertRaises (ValueError ):
816
+ pd .to_datetime (units_from_epoch , unit = unit ,
817
+ origin = origin )
818
+
819
+ for unit in units :
820
+ # errors = 'coerce'
821
+ result = Series (pd .to_datetime (units_from_epoch , unit = unit ,
822
+ origin = origin , errors = 'coerce' ))
823
+ expected = Series ([tslib .NaT , tslib .NaT , tslib .NaT ,
824
+ tslib .NaT , tslib .NaT ])
825
+ assert_series_equal (result , expected )
826
+
827
+ # errors = 'ignore'
828
+ result = Series (pd .to_datetime (units_from_epoch , unit = unit ,
829
+ origin = origin , errors = 'ignore' ))
830
+ expected = Series (units_from_epoch )
831
+ assert_series_equal (result , expected )
832
+
833
+
834
+
835
+
775
836
def test_series_ctor_datetime64 (self ):
776
837
rng = date_range ('1/1/2000 00:00:00' , '1/1/2000 1:59:50' , freq = '10s' )
777
838
dates = np .asarray (rng )
0 commit comments