@@ -1991,7 +1991,7 @@ def test_unimplemented_dtypes_table_columns(self):
1991
1991
# this fails because we have a date in the object block......
1992
1992
self .assertRaises (TypeError , store .append , 'df_unimplemented' , df )
1993
1993
1994
- def test_append_with_timezones (self ):
1994
+ def test_append_with_timezones_pytz (self ):
1995
1995
1996
1996
from datetime import timedelta
1997
1997
@@ -2020,7 +2020,8 @@ def compare(a,b):
2020
2020
compare (store .select ('df_tz' ,where = Term ('A>=df.A[3]' )),df [df .A >= df .A [3 ]])
2021
2021
2022
2022
_maybe_remove (store , 'df_tz' )
2023
- df = DataFrame (dict (A = Timestamp ('20130102' ,tz = 'US/Eastern' ), B = Timestamp ('20130103' ,tz = 'US/Eastern' )),index = range (5 ))
2023
+ # ensure we include dates in DST and STD time here.
2024
+ df = DataFrame (dict (A = Timestamp ('20130102' ,tz = 'US/Eastern' ), B = Timestamp ('20130603' ,tz = 'US/Eastern' )),index = range (5 ))
2024
2025
store .append ('df_tz' ,df )
2025
2026
result = store ['df_tz' ]
2026
2027
compare (result ,df )
@@ -2057,6 +2058,78 @@ def compare(a,b):
2057
2058
result = store .select ('df' )
2058
2059
assert_frame_equal (result ,df )
2059
2060
2061
+ def test_append_with_timezones_dateutil (self ):
2062
+
2063
+ from datetime import timedelta
2064
+
2065
+ try :
2066
+ import dateutil
2067
+ except ImportError :
2068
+ raise nose .SkipTest
2069
+
2070
+ def compare (a , b ):
2071
+ tm .assert_frame_equal (a , b )
2072
+
2073
+ # compare the zones on each element
2074
+ for c in a .columns :
2075
+ for i in a .index :
2076
+ a_e = a [c ][i ]
2077
+ b_e = b [c ][i ]
2078
+ if not (a_e == b_e and a_e .tz == b_e .tz ):
2079
+ raise AssertionError ("invalid tz comparsion [%s] [%s]" % (a_e , b_e ))
2080
+
2081
+ # as columns
2082
+ with ensure_clean_store (self .path ) as store :
2083
+
2084
+ _maybe_remove (store , 'df_tz' )
2085
+ df = DataFrame (dict (A = [ Timestamp ('20130102 2:00:00' , tz = dateutil .tz .gettz ('US/Eastern' )) + timedelta (hours = 1 ) * i for i in range (5 ) ]))
2086
+ store .append ('df_tz' , df , data_columns = ['A' ])
2087
+ result = store ['df_tz' ]
2088
+ compare (result , df )
2089
+ assert_frame_equal (result , df )
2090
+
2091
+ # select with tz aware
2092
+ compare (store .select ('df_tz' , where = Term ('A>=df.A[3]' )), df [df .A >= df .A [3 ]])
2093
+
2094
+ _maybe_remove (store , 'df_tz' )
2095
+ # ensure we include dates in DST and STD time here.
2096
+ df = DataFrame (dict (A = Timestamp ('20130102' , tz = dateutil .tz .gettz ('US/Eastern' )), B = Timestamp ('20130603' , tz = dateutil .tz .gettz ('US/Eastern' ))), index = range (5 ))
2097
+ store .append ('df_tz' , df )
2098
+ result = store ['df_tz' ]
2099
+ compare (result , df )
2100
+ assert_frame_equal (result , df )
2101
+
2102
+ _maybe_remove (store , 'df_tz' )
2103
+ df = DataFrame (dict (A = Timestamp ('20130102' , tz = dateutil .tz .gettz ('US/Eastern' )), B = Timestamp ('20130102' , tz = dateutil .tz .gettz ('EET' ))), index = range (5 ))
2104
+ self .assertRaises (TypeError , store .append , 'df_tz' , df )
2105
+
2106
+ # this is ok
2107
+ _maybe_remove (store , 'df_tz' )
2108
+ store .append ('df_tz' , df , data_columns = ['A' , 'B' ])
2109
+ result = store ['df_tz' ]
2110
+ compare (result , df )
2111
+ assert_frame_equal (result , df )
2112
+
2113
+ # can't append with diff timezone
2114
+ df = DataFrame (dict (A = Timestamp ('20130102' , tz = dateutil .tz .gettz ('US/Eastern' )), B = Timestamp ('20130102' , tz = dateutil .tz .gettz ('CET' ))), index = range (5 ))
2115
+ self .assertRaises (ValueError , store .append , 'df_tz' , df )
2116
+
2117
+ # as index
2118
+ with ensure_clean_store (self .path ) as store :
2119
+
2120
+ # GH 4098 example
2121
+ df = DataFrame (dict (A = Series (lrange (3 ), index = date_range ('2000-1-1' , periods = 3 , freq = 'H' , tz = dateutil .tz .gettz ('US/Eastern' )))))
2122
+
2123
+ _maybe_remove (store , 'df' )
2124
+ store .put ('df' , df )
2125
+ result = store .select ('df' )
2126
+ assert_frame_equal (result , df )
2127
+
2128
+ _maybe_remove (store , 'df' )
2129
+ store .append ('df' , df )
2130
+ result = store .select ('df' )
2131
+ assert_frame_equal (result , df )
2132
+
2060
2133
def test_store_timezone (self ):
2061
2134
# GH2852
2062
2135
# issue storing datetime.date with a timezone as it resets when read back in a new timezone
0 commit comments