@@ -124,6 +124,21 @@ def df_full():
124124 )
125125
126126
127+ @pytest .fixture (
128+ params = [
129+ datetime .datetime .now (datetime .timezone .utc ),
130+ datetime .datetime .now (datetime .timezone .min ),
131+ datetime .datetime .now (datetime .timezone .max ),
132+ datetime .datetime .strptime ("2019-01-04T16:41:24+0200" , "%Y-%m-%dT%H:%M:%S%z" ),
133+ datetime .datetime .strptime ("2019-01-04T16:41:24+0215" , "%Y-%m-%dT%H:%M:%S%z" ),
134+ datetime .datetime .strptime ("2019-01-04T16:41:24-0200" , "%Y-%m-%dT%H:%M:%S%z" ),
135+ datetime .datetime .strptime ("2019-01-04T16:41:24-0215" , "%Y-%m-%dT%H:%M:%S%z" ),
136+ ]
137+ )
138+ def timezone_aware_date_list (request ):
139+ return request .param
140+
141+
127142def check_round_trip (
128143 df ,
129144 engine = None ,
@@ -133,6 +148,7 @@ def check_round_trip(
133148 expected = None ,
134149 check_names = True ,
135150 check_like = False ,
151+ check_dtype = True ,
136152 repeat = 2 ,
137153):
138154 """Verify parquet serializer and deserializer produce the same results.
@@ -174,7 +190,11 @@ def compare(repeat):
174190 actual = read_parquet (path , ** read_kwargs )
175191
176192 tm .assert_frame_equal (
177- expected , actual , check_names = check_names , check_like = check_like
193+ expected ,
194+ actual ,
195+ check_names = check_names ,
196+ check_like = check_like ,
197+ check_dtype = check_dtype ,
178198 )
179199
180200 if path is None :
@@ -724,6 +744,13 @@ def test_timestamp_nanoseconds(self, pa):
724744 df = pd .DataFrame ({"a" : pd .date_range ("2017-01-01" , freq = "1n" , periods = 10 )})
725745 check_round_trip (df , pa , write_kwargs = {"version" : "2.0" })
726746
747+ def test_timezone_aware_index (self , pa , timezone_aware_date_list ):
748+ idx = 5 * [timezone_aware_date_list ]
749+ df = pd .DataFrame (index = idx , data = {"index_as_col" : idx })
750+
751+ # compare time(zone) values only, skip their class
752+ check_round_trip (df , pa , check_dtype = False )
753+
727754 @td .skip_if_no ("pyarrow" , min_version = "0.17" )
728755 def test_filter_row_groups (self , pa ):
729756 # https://github.com/pandas-dev/pandas/issues/26551
@@ -862,3 +889,12 @@ def test_empty_dataframe(self, fp):
862889 expected = df .copy ()
863890 expected .index .name = "index"
864891 check_round_trip (df , fp , expected = expected )
892+
893+ def test_timezone_aware_index (self , fp , timezone_aware_date_list ):
894+ idx = 5 * [timezone_aware_date_list ]
895+
896+ df = pd .DataFrame (index = idx , data = {"index_as_col" : idx })
897+
898+ expected = df .copy ()
899+ expected .index .name = "index"
900+ check_round_trip (df , fp , expected = expected )
0 commit comments