def slide8(): import pytz print pytz.common_timezones[-5:] print 'US/Eastern' tz = pytz.timezone('US/Eastern') print tz rng = pd.date_range('3/9/2012 9:30', periods=6, freq='D') ts = Series(np.random.randn(len(rng)), index=rng) print ts.index.tz print 'date_range utc' print pd.date_range('3/9/2012 9:30', periods=10, freq='D', tz='UTC') print 'tz_localize to UTC' ts_utc = ts.tz_localize('UTC') print ts_utc print ts_utc.index print 'tz_convert to us/Eastern' print ts_utc.tz_convert('US/Eastern') print 'tz_localize to us/Eastern' ts_eastern = ts.tz_localize('US/Eastern') print ts_eastern.tz_convert('UTC') print 'tz_convert' print ts_eastern.tz_convert('Europe/Berlin') stamp = pd.Timestamp('2011-03-12 04:00') stamp_utc = stamp.tz_localize('utc') print 'us/eastern' print stamp_utc.tz_convert('US/Eastern') stamp_moscow = pd.Timestamp('2011-03-12 04:00', tz='Europe/Moscow') print 'moscow' print stamp_moscow print 'nano seconds' print stamp_utc.value print stamp_utc.tz_convert('US/Eastern').value from pandas.tseries.offsets import Hour stamp = pd.Timestamp('2012-03-12 01:30', tz='US/Eastern') print stamp print '+hour' print stamp + Hour() stamp = pd.Timestamp('2012-11-04 00:30', tz='US/Eastern') print 'summer time' print stamp + 2 * Hour() print 'between different time zones' rng = pd.date_range('3/7/2012 9:30', periods=10, freq='B') ts = Series(np.random.randn(len(rng)), index=rng) print ts ts1 = ts[:7].tz_localize('Europe/London') ts2 = ts1[2:].tz_convert('Europe/Moscow') result = ts1 + ts2 print result.index
def test_tz_localize_nonexistent(self, tz, method, exp): # GH 8917 n = 60 dti = date_range(start="2015-03-29 02:00:00", periods=n, freq="min") ser = Series(1, index=dti) df = ser.to_frame() if method == "raise": with tm.external_error_raised(pytz.NonExistentTimeError): dti.tz_localize(tz, nonexistent=method) with tm.external_error_raised(pytz.NonExistentTimeError): ser.tz_localize(tz, nonexistent=method) with tm.external_error_raised(pytz.NonExistentTimeError): df.tz_localize(tz, nonexistent=method) elif exp == "invalid": with pytest.raises(ValueError, match="argument must be one of"): dti.tz_localize(tz, nonexistent=method) with pytest.raises(ValueError, match="argument must be one of"): ser.tz_localize(tz, nonexistent=method) with pytest.raises(ValueError, match="argument must be one of"): df.tz_localize(tz, nonexistent=method) else: result = ser.tz_localize(tz, nonexistent=method) expected = Series(1, index=DatetimeIndex([exp] * n, tz=tz)) tm.assert_series_equal(result, expected) result = df.tz_localize(tz, nonexistent=method) expected = expected.to_frame() tm.assert_frame_equal(result, expected)
def test_series_tz_localize_empty(self, tzstr): # GH#2248 ser = Series(dtype=object) ser2 = ser.tz_localize("utc") assert ser2.index.tz == pytz.utc ser2 = ser.tz_localize(tzstr) timezones.tz_compare(ser2.index.tz, timezones.maybe_get_tz(tzstr))
def test_tz_localize_naive(self, frame_or_series): # Can't localize if already tz-aware rng = date_range("1/1/2011", periods=100, freq="H", tz="utc") ts = Series(1, index=rng) ts = frame_or_series(ts) with pytest.raises(TypeError, match="Already tz-aware"): ts.tz_localize("US/Eastern")
def test_series_tz_localize_empty(self, tzstr): # GH#2248 ser = Series() ser2 = ser.tz_localize('utc') assert ser2.index.tz == pytz.utc ser2 = ser.tz_localize(tzstr) timezones.tz_compare(ser2.index.tz, timezones.maybe_get_tz(tzstr))
def test_tz_localize_empty_series(self): # #2248 ts = Series() ts2 = ts.tz_localize("utc") self.assertTrue(ts2.index.tz == pytz.utc) ts2 = ts.tz_localize(self.tzstr("US/Eastern")) self.assertTrue(self.cmptz(ts2.index.tz, self.tz("US/Eastern")))
def test_tz_localize_empty_series(self): # #2248 ts = Series() ts2 = ts.tz_localize('utc') self.assertTrue(ts2.index.tz == pytz.utc) ts2 = ts.tz_localize('US/Eastern') self.assertTrue(ts2.index.tz == pytz.timezone('US/Eastern'))
def test_series_tz_localize(self): rng = date_range("1/1/2011", periods=100, freq="H") ts = Series(1, index=rng) result = ts.tz_localize("utc") assert result.index.tz.zone == "UTC" # Can't localize if already tz-aware rng = date_range("1/1/2011", periods=100, freq="H", tz="utc") ts = Series(1, index=rng) with pytest.raises(TypeError, match="Already tz-aware"): ts.tz_localize("US/Eastern")
def test_series_tz_localize(self): rng = date_range('1/1/2011', periods=100, freq='H') ts = Series(1, index=rng) result = ts.tz_localize('utc') assert result.index.tz.zone == 'UTC' # Can't localize if already tz-aware rng = date_range('1/1/2011', periods=100, freq='H', tz='utc') ts = Series(1, index=rng) with pytest.raises(TypeError, match='Already tz-aware'): ts.tz_localize('US/Eastern')
def test_series_tz_localize_nonexistent(self, tz, method, exp): # GH 8917 n = 60 dti = date_range(start='2015-03-29 02:00:00', periods=n, freq='min') s = Series(1, dti) if method == 'raise': with pytest.raises(pytz.NonExistentTimeError): s.tz_localize(tz, nonexistent=method) elif exp == 'invalid': with pytest.raises(ValueError): dti.tz_localize(tz, nonexistent=method) else: result = s.tz_localize(tz, nonexistent=method) expected = Series(1, index=DatetimeIndex([exp] * n, tz=tz)) tm.assert_series_equal(result, expected)
def test_series_tz_localize_nonexistent(self, tz, method, exp): # GH 8917 n = 60 dti = date_range(start="2015-03-29 02:00:00", periods=n, freq="min") s = Series(1, dti) if method == "raise": with pytest.raises(pytz.NonExistentTimeError): s.tz_localize(tz, nonexistent=method) elif exp == "invalid": with pytest.raises(ValueError): dti.tz_localize(tz, nonexistent=method) else: result = s.tz_localize(tz, nonexistent=method) expected = Series(1, index=DatetimeIndex([exp] * n, tz=tz)) tm.assert_series_equal(result, expected)
def test_join_aware(self): rng = date_range('1/1/2011', periods=10, freq='H') ts = Series(np.random.randn(len(rng)), index=rng) ts_utc = ts.tz_localize('utc') self.assertRaises(Exception, ts.__add__, ts_utc) self.assertRaises(Exception, ts_utc.__add__, ts) test1 = DataFrame(np.zeros((6,3)), index=date_range("2012-11-15 00:00:00", periods=6, freq="100L", tz="US/Central")) test2 = DataFrame(np.zeros((3,3)), index=date_range("2012-11-15 00:00:00", periods=3, freq="250L", tz="US/Central"), columns=range(3,6)) result = test1.join(test2, how='outer') ex_index = test1.index.union(test2.index) self.assertTrue(result.index.equals(ex_index)) self.assertTrue(result.index.tz.zone == 'US/Central') # non-overlapping rng = date_range("2012-11-15 00:00:00", periods=6, freq="H", tz="US/Central") rng2 = date_range("2012-11-15 12:00:00", periods=6, freq="H", tz="US/Eastern") result = rng.union(rng2) self.assertTrue(result.tz.zone == 'UTC')
def test_join_aware(self): rng = date_range('1/1/2011', periods=10, freq='H') ts = Series(np.random.randn(len(rng)), index=rng) ts_utc = ts.tz_localize('utc') self.assertRaises(Exception, ts.__add__, ts_utc) self.assertRaises(Exception, ts_utc.__add__, ts) test1 = DataFrame(np.zeros((6, 3)), index=date_range("2012-11-15 00:00:00", periods=6, freq="100L", tz="US/Central")) test2 = DataFrame(np.zeros((3, 3)), index=date_range("2012-11-15 00:00:00", periods=3, freq="250L", tz="US/Central"), columns=range(3, 6)) result = test1.join(test2, how='outer') ex_index = test1.index.union(test2.index) self.assertTrue(result.index.equals(ex_index)) self.assertTrue(result.index.tz.zone == 'US/Central') # non-overlapping rng = date_range("2012-11-15 00:00:00", periods=6, freq="H", tz="US/Central") rng2 = date_range("2012-11-15 12:00:00", periods=6, freq="H", tz="US/Eastern") result = rng.union(rng2) self.assertTrue(result.tz.zone == 'UTC')
def test_resample_tz_localized(self): dr = date_range(start="2012-4-13", end="2012-5-1") ts = Series(lrange(len(dr)), dr) ts_utc = ts.tz_localize("UTC") ts_local = ts_utc.tz_convert("America/Los_Angeles") result = ts_local.resample("W") ts_local_naive = ts_local.copy() ts_local_naive.index = [x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime()] exp = ts_local_naive.resample("W").tz_localize("America/Los_Angeles") assert_series_equal(result, exp) # it works result = ts_local.resample("D") # #2245 idx = date_range("2001-09-20 15:59", "2001-09-20 16:00", freq="T", tz="Australia/Sydney") s = Series([1, 2], index=idx) result = s.resample("D", closed="right", label="right") ex_index = date_range("2001-09-21", periods=1, freq="D", tz="Australia/Sydney") expected = Series([1.5], index=ex_index) assert_series_equal(result, expected) # for good measure result = s.resample("D", kind="period") ex_index = period_range("2001-09-20", periods=1, freq="D") expected = Series([1.5], index=ex_index) assert_series_equal(result, expected)
def filter_series(ds: pd.Series, first_date: datetime.date, last_date: datetime.date) -> pd.DataFrame: if not isinstance(first_date, datetime.datetime) and not isinstance(last_date, datetime.datetime): return ds[list( filter(lambda x: last_date + datetime.timedelta(days=1) > x > first_date - datetime.timedelta(days=1), ds.index))] if ds.index.tz == first_date.tz and ds.index.tz == last_date.tz: return ds[list( filter(lambda x: last_date + datetime.timedelta(days=1) > x > first_date - datetime.timedelta(days=1), ds.index))] if isinstance(first_date, datetime.datetime): if first_date.tzinfo != datetime.timezone.utc: first_date_utc = first_date.replace(tzinfo=datetime.timezone.utc) return filter_series(ds, first_date_utc, last_date) if isinstance(last_date, datetime.datetime): if last_date.tzinfo != datetime.timezone.utc: last_date_utc = last_date.replace(tzinfo=datetime.timezone.utc) return filter_series(ds, first_date, last_date_utc) if hasattr(ds.index.tz, 'zone'): if ds.index.tz.zone != "UTC": ds = ds.tz_localize(datetime.timezone.utc) return ds[list( filter(lambda x: last_date + datetime.timedelta(days=1) > x > first_date - datetime.timedelta(days=1), ds.index))]
def part4(): """时区处理""" import pytz # print(pytz.common_timezones[-5:]) # 时区名 # print(pytz.timezone('US/Eastern')) # 时区对象 # 1、本地化和转换 # 默认,pandas中德时间序列是naive时区,也就是没有时区的 rng = pd.date_range('3/9/2012 9:30', periods=6, freq='D') ts = Series(np.random.randn(len(rng)), index=rng) # print(ts.index.tz) rng = pd.date_range('3/9/2012 9:30', periods=6, freq='D', tz='UTC') ts_utc = Series(np.random.randn(len(rng)), index=rng) # print(ts_utc.index.tz) # 通过tz_localize方法可以为没有时区的时间序列赋予时区 ts_utc = ts.tz_localize('UTC') # print(ts_utc) # 一旦时间序列被本地化到某个特定时区,就可以用tz_convert将其转换到别的时区了 # print(ts_utc.tz_convert('US/Eastern')) # 2、操作时区意识型Timestamp对象 stamp = pd.Timestamp('2022-03-12 04:00') stamp_utc = stamp.tz_localize('utc') stamp_utc.tz_convert('US/Eastern')
def test_resample_tz_localized(self): dr = date_range(start="2012-4-13", end="2012-5-1") ts = Series(range(len(dr)), index=dr) ts_utc = ts.tz_localize("UTC") ts_local = ts_utc.tz_convert("America/Los_Angeles") result = ts_local.resample("W").mean() ts_local_naive = ts_local.copy() ts_local_naive.index = [ x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime() ] exp = ts_local_naive.resample("W").mean().tz_localize("America/Los_Angeles") exp.index = pd.DatetimeIndex(exp.index, freq="W") tm.assert_series_equal(result, exp) # it works result = ts_local.resample("D").mean() # #2245 idx = date_range( "2001-09-20 15:59", "2001-09-20 16:00", freq="T", tz="Australia/Sydney" ) s = Series([1, 2], index=idx) result = s.resample("D", closed="right", label="right").mean() ex_index = date_range("2001-09-21", periods=1, freq="D", tz="Australia/Sydney") expected = Series([1.5], index=ex_index) tm.assert_series_equal(result, expected) # for good measure result = s.resample("D", kind="period").mean() ex_index = period_range("2001-09-20", periods=1, freq="D") expected = Series([1.5], index=ex_index) tm.assert_series_equal(result, expected) # GH 6397 # comparing an offset that doesn't propagate tz's rng = date_range("1/1/2011", periods=20000, freq="H") rng = rng.tz_localize("EST") ts = DataFrame(index=rng) ts["first"] = np.random.randn(len(rng)) ts["second"] = np.cumsum(np.random.randn(len(rng))) expected = DataFrame( { "first": ts.resample("A").sum()["first"], "second": ts.resample("A").mean()["second"], }, columns=["first", "second"], ) result = ( ts.resample("A") .agg({"first": np.sum, "second": np.mean}) .reindex(columns=["first", "second"]) ) tm.assert_frame_equal(result, expected)
def test_join_naive_with_aware(self): rng = date_range('1/1/2011', periods=10, freq='H') ts = Series(np.random.randn(len(rng)), index=rng) ts_utc = ts.tz_localize('utc') self.assertRaises(Exception, ts.__add__, ts_utc) self.assertRaises(Exception, ts_utc.__add__, ts)
def test_resample_tz_localized(self): dr = date_range(start='2012-4-13', end='2012-5-1') ts = Series(lrange(len(dr)), dr) ts_utc = ts.tz_localize('UTC') ts_local = ts_utc.tz_convert('America/Los_Angeles') result = ts_local.resample('W').mean() ts_local_naive = ts_local.copy() ts_local_naive.index = [x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime()] exp = ts_local_naive.resample( 'W').mean().tz_localize('America/Los_Angeles') assert_series_equal(result, exp) # it works result = ts_local.resample('D').mean() # #2245 idx = date_range('2001-09-20 15:59', '2001-09-20 16:00', freq='T', tz='Australia/Sydney') s = Series([1, 2], index=idx) result = s.resample('D', closed='right', label='right').mean() ex_index = date_range('2001-09-21', periods=1, freq='D', tz='Australia/Sydney') expected = Series([1.5], index=ex_index) assert_series_equal(result, expected) # for good measure result = s.resample('D', kind='period').mean() ex_index = period_range('2001-09-20', periods=1, freq='D') expected = Series([1.5], index=ex_index) assert_series_equal(result, expected) # GH 6397 # comparing an offset that doesn't propagate tz's rng = date_range('1/1/2011', periods=20000, freq='H') rng = rng.tz_localize('EST') ts = DataFrame(index=rng) ts['first'] = np.random.randn(len(rng)) ts['second'] = np.cumsum(np.random.randn(len(rng))) expected = DataFrame( { 'first': ts.resample('A').sum()['first'], 'second': ts.resample('A').mean()['second']}, columns=['first', 'second']) result = ts.resample( 'A').agg({'first': np.sum, 'second': np.mean}).reindex(columns=['first', 'second']) assert_frame_equal(result, expected)
def test_series_add_aware_naive_raises(self): rng = date_range('1/1/2011', periods=10, freq='H') ser = Series(np.random.randn(len(rng)), index=rng) ser_utc = ser.tz_localize('utc') with pytest.raises(Exception): ser + ser_utc with pytest.raises(Exception): ser_utc + ser
def test_series_add_aware_naive_raises(self): rng = date_range("1/1/2011", periods=10, freq="H") ser = Series(np.random.randn(len(rng)), index=rng) ser_utc = ser.tz_localize("utc") with pytest.raises(Exception): ser + ser_utc with pytest.raises(Exception): ser_utc + ser
def test_series_add_aware_naive_raises(self): rng = date_range("1/1/2011", periods=10, freq="H") ser = Series(np.random.randn(len(rng)), index=rng) ser_utc = ser.tz_localize("utc") msg = "Cannot join tz-naive with tz-aware DatetimeIndex" with pytest.raises(Exception, match=msg): ser + ser_utc with pytest.raises(Exception, match=msg): ser_utc + ser
def test_localized_at_time(self, tzstr): tz = timezones.maybe_get_tz(tzstr) rng = date_range("4/16/2012", "5/1/2012", freq="H") ts = Series(np.random.randn(len(rng)), index=rng) ts_local = ts.tz_localize(tzstr) result = ts_local.at_time(time(10, 0)) expected = ts.at_time(time(10, 0)).tz_localize(tzstr) tm.assert_series_equal(result, expected) assert timezones.tz_compare(result.index.tz, tz)
def test_localized_between_time(self, tzstr, frame_or_series): tz = timezones.maybe_get_tz(tzstr) rng = date_range("4/16/2012", "5/1/2012", freq="H") ts = Series(np.random.randn(len(rng)), index=rng) if frame_or_series is DataFrame: ts = ts.to_frame() ts_local = ts.tz_localize(tzstr) t1, t2 = time(10, 0), time(11, 0) result = ts_local.between_time(t1, t2) expected = ts.between_time(t1, t2).tz_localize(tzstr) tm.assert_equal(result, expected) assert timezones.tz_compare(result.index.tz, tz)
def test_resample_tz_localized(self): dr = date_range(start="2012-4-13", end="2012-5-1") ts = Series(lrange(len(dr)), dr) ts_utc = ts.tz_localize("UTC") ts_local = ts_utc.tz_convert("America/Los_Angeles") result = ts_local.resample("W") ts_local_naive = ts_local.copy() ts_local_naive.index = [x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime()] exp = ts_local_naive.resample("W").tz_localize("America/Los_Angeles") assert_series_equal(result, exp) # it works result = ts_local.resample("D") # #2245 idx = date_range("2001-09-20 15:59", "2001-09-20 16:00", freq="T", tz="Australia/Sydney") s = Series([1, 2], index=idx) result = s.resample("D", closed="right", label="right") ex_index = date_range("2001-09-21", periods=1, freq="D", tz="Australia/Sydney") expected = Series([1.5], index=ex_index) assert_series_equal(result, expected) # for good measure result = s.resample("D", kind="period") ex_index = period_range("2001-09-20", periods=1, freq="D") expected = Series([1.5], index=ex_index) assert_series_equal(result, expected) # GH 6397 # comparing an offset that doesn't propogate tz's rng = date_range("1/1/2011", periods=20000, freq="H") rng = rng.tz_localize("EST") ts = DataFrame(index=rng) ts["first"] = np.random.randn(len(rng)) ts["second"] = np.cumsum(np.random.randn(len(rng))) expected = DataFrame( {"first": ts.resample("A", how=np.sum)["first"], "second": ts.resample("A", how=np.mean)["second"]}, columns=["first", "second"], ) result = ts.resample("A", how={"first": np.sum, "second": np.mean}).reindex(columns=["first", "second"]) assert_frame_equal(result, expected)
def test_resample_tz_localized(self): dr = date_range(start='2012-4-13', end='2012-5-1') ts = Series(range(len(dr)), dr) ts_utc = ts.tz_localize('UTC') ts_local = ts_utc.tz_convert('America/Los_Angeles') result = ts_local.resample('W') ts_local_naive = ts_local.copy() ts_local_naive.index = [x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime()] exp = ts_local_naive.resample('W').tz_localize('America/Los_Angeles') assert_series_equal(result, exp)
def test_resample_nonexistent_time_bin_edge(self): # GH 19375 index = date_range('2017-03-12', '2017-03-12 1:45:00', freq='15T') s = Series(np.zeros(len(index)), index=index) expected = s.tz_localize('US/Pacific') result = expected.resample('900S').mean() tm.assert_series_equal(result, expected) # GH 23742 index = date_range(start='2017-10-10', end='2017-10-20', freq='1H') index = index.tz_localize('UTC').tz_convert('America/Sao_Paulo') df = DataFrame(data=list(range(len(index))), index=index) result = df.groupby(pd.Grouper(freq='1D')).count() expected = date_range(start='2017-10-09', end='2017-10-20', freq='D', tz="America/Sao_Paulo", nonexistent='shift_forward', closed='left') tm.assert_index_equal(result.index, expected)
def test_series_frame_tz_localize(self): rng = date_range('1/1/2011', periods=100, freq='H') ts = Series(1, index=rng) result = ts.tz_localize('utc') self.assert_(result.index.tz.zone == 'UTC') df = DataFrame({'a': 1}, index=rng) result = df.tz_localize('utc') expected = DataFrame({'a': 1}, rng.tz_localize('UTC')) self.assert_(result.index.tz.zone == 'UTC') assert_frame_equal(result, expected) df = df.T result = df.tz_localize('utc', axis=1) self.assert_(result.columns.tz.zone == 'UTC') assert_frame_equal(result, expected.T)
def test_resample_tz_localized(self): dr = date_range(start='2012-4-13', end='2012-5-1') ts = Series(range(len(dr)), dr) ts_utc = ts.tz_localize('UTC') ts_local = ts_utc.tz_convert('America/Los_Angeles') result = ts_local.resample('W') ts_local_naive = ts_local.copy() ts_local_naive.index = [ x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime() ] exp = ts_local_naive.resample('W').tz_localize('America/Los_Angeles') assert_series_equal(result, exp)
def test_localized_at_time_between_time(self): from datetime import time rng = date_range('4/16/2012', '5/1/2012', freq='H') ts = Series(np.random.randn(len(rng)), index=rng) ts_local = ts.tz_localize('US/Eastern') result = ts_local.at_time(time(10, 0)) expected = ts.at_time(time(10, 0)).tz_localize('US/Eastern') assert_series_equal(result, expected) self.assert_(result.index.tz.zone == 'US/Eastern') t1, t2 = time(10, 0), time(11, 0) result = ts_local.between_time(t1, t2) expected = ts.between_time(t1, t2).tz_localize('US/Eastern') assert_series_equal(result, expected) self.assert_(result.index.tz.zone == 'US/Eastern')
def test_localized_at_time_between_time(self): from datetime import time rng = date_range("4/16/2012", "5/1/2012", freq="H") ts = Series(np.random.randn(len(rng)), index=rng) ts_local = ts.tz_localize(self.tzstr("US/Eastern")) result = ts_local.at_time(time(10, 0)) expected = ts.at_time(time(10, 0)).tz_localize(self.tzstr("US/Eastern")) tm.assert_series_equal(result, expected) self.assertTrue(self.cmptz(result.index.tz, self.tz("US/Eastern"))) t1, t2 = time(10, 0), time(11, 0) result = ts_local.between_time(t1, t2) expected = ts.between_time(t1, t2).tz_localize(self.tzstr("US/Eastern")) tm.assert_series_equal(result, expected) self.assertTrue(self.cmptz(result.index.tz, self.tz("US/Eastern")))
def test_localized_at_time_between_time(self, tzstr): from datetime import time tz = timezones.maybe_get_tz(tzstr) rng = date_range('4/16/2012', '5/1/2012', freq='H') ts = Series(np.random.randn(len(rng)), index=rng) ts_local = ts.tz_localize(tzstr) result = ts_local.at_time(time(10, 0)) expected = ts.at_time(time(10, 0)).tz_localize(tzstr) tm.assert_series_equal(result, expected) assert timezones.tz_compare(result.index.tz, tz) t1, t2 = time(10, 0), time(11, 0) result = ts_local.between_time(t1, t2) expected = ts.between_time(t1, t2).tz_localize(tzstr) tm.assert_series_equal(result, expected) assert timezones.tz_compare(result.index.tz, tz)
def test_resample_tz_localized(self): dr = date_range(start='2012-4-13', end='2012-5-1') ts = Series(range(len(dr)), dr) ts_utc = ts.tz_localize('UTC') ts_local = ts_utc.tz_convert('America/Los_Angeles') result = ts_local.resample('W') ts_local_naive = ts_local.copy() ts_local_naive.index = [ x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime() ] exp = ts_local_naive.resample('W').tz_localize('America/Los_Angeles') assert_series_equal(result, exp) # it works result = ts_local.resample('D') # #2245 idx = date_range('2001-09-20 15:59', '2001-09-20 16:00', freq='T', tz='Australia/Sydney') s = Series([1, 2], index=idx) result = s.resample('D', closed='right', label='right') ex_index = date_range('2001-09-21', periods=1, freq='D', tz='Australia/Sydney') expected = Series([1.5], index=ex_index) assert_series_equal(result, expected) # for good measure result = s.resample('D', kind='period') ex_index = period_range('2001-09-20', periods=1, freq='D') expected = Series([1.5], index=ex_index) assert_series_equal(result, expected)
def test_resample_nonexistent_time_bin_edge(self): # GH 19375 index = date_range("2017-03-12", "2017-03-12 1:45:00", freq="15T") s = Series(np.zeros(len(index)), index=index) expected = s.tz_localize("US/Pacific") result = expected.resample("900S").mean() tm.assert_series_equal(result, expected) # GH 23742 index = date_range(start="2017-10-10", end="2017-10-20", freq="1H") index = index.tz_localize("UTC").tz_convert("America/Sao_Paulo") df = DataFrame(data=list(range(len(index))), index=index) result = df.groupby(pd.Grouper(freq="1D")).count() expected = date_range( start="2017-10-09", end="2017-10-20", freq="D", tz="America/Sao_Paulo", nonexistent="shift_forward", closed="left", ) tm.assert_index_equal(result.index, expected)
def test_series_frame_tz_localize(self): rng = date_range('1/1/2011', periods=100, freq='H') ts = Series(1, index=rng) result = ts.tz_localize('utc') self.assert_(result.index.tz.zone == 'UTC') df = DataFrame({'a': 1}, index=rng) result = df.tz_localize('utc') expected = DataFrame({'a': 1}, rng.tz_localize('UTC')) self.assert_(result.index.tz.zone == 'UTC') assert_frame_equal(result, expected) df = df.T result = df.tz_localize('utc', axis=1) self.assert_(result.columns.tz.zone == 'UTC') assert_frame_equal(result, expected.T) # Can't localize if already tz-aware rng = date_range('1/1/2011', periods=100, freq='H', tz='utc') ts = Series(1, index=rng) self.assertRaises(Exception, ts.tz_localize, 'US/Eastern')
def test_series_frame_tz_localize(self): rng = date_range("1/1/2011", periods=100, freq="H") ts = Series(1, index=rng) result = ts.tz_localize("utc") self.assertEqual(result.index.tz.zone, "UTC") df = DataFrame({"a": 1}, index=rng) result = df.tz_localize("utc") expected = DataFrame({"a": 1}, rng.tz_localize("UTC")) self.assertEqual(result.index.tz.zone, "UTC") assert_frame_equal(result, expected) df = df.T result = df.tz_localize("utc", axis=1) self.assertEqual(result.columns.tz.zone, "UTC") assert_frame_equal(result, expected.T) # Can't localize if already tz-aware rng = date_range("1/1/2011", periods=100, freq="H", tz="utc") ts = Series(1, index=rng) tm.assertRaisesRegexp(TypeError, "Already tz-aware", ts.tz_localize, "US/Eastern")
def test_resample_tz_localized(self): dr = date_range(start='2012-4-13', end='2012-5-1') ts = Series(range(len(dr)), dr) ts_utc = ts.tz_localize('UTC') ts_local = ts_utc.tz_convert('America/Los_Angeles') result = ts_local.resample('W') ts_local_naive = ts_local.copy() ts_local_naive.index = [x.replace(tzinfo=None) for x in ts_local_naive.index.to_pydatetime()] exp = ts_local_naive.resample('W').tz_localize('America/Los_Angeles') assert_series_equal(result, exp) # it works result = ts_local.resample('D') # #2245 idx = date_range('2001-09-20 15:59', '2001-09-20 16:00', freq='T', tz='Australia/Sydney') s = Series([1, 2], index=idx) result = s.resample('D', closed='right', label='right') ex_index = date_range('2001-09-21', periods=1, freq='D', tz='Australia/Sydney') expected = Series([1.5], index=ex_index) assert_series_equal(result, expected) # for good measure result = s.resample('D', kind='period') ex_index = period_range('2001-09-20', periods=1, freq='D') expected = Series([1.5], index=ex_index) assert_series_equal(result, expected)
print(pytz.common_timezones[:]) # 获得pytz的时区对象,可使用pytz。timezone tz = pytz.timezone('America/New_York') print("This is tz", tz) # 11.4.1时区的本地化和转换 rng = pd.date_range('3/9/2012 9:30', periods=6, freq='D') ts = pd.Series(np.random.randn(len(rng)), index=rng) print(ts) print(ts.index.tz) print(pd.date_range('3/9/2012 9:30', periods=10, freq='D', tz='UTC')) # 使用tz_localize方法可从简单时区转换到本地化时区 print("This is ts", ts) ts_utc = ts.tz_localize('UTC') print("This is us_utc", ts_utc) print(ts_utc.index) print(ts_utc.tz_convert('America/New_York')) # 将其本地化到EST并转换为UTC或柏林时间 ts_eastern = ts.tz_localize('America/New_York') print(ts_eastern.tz_convert('UTC')) print(ts_eastern.tz_convert('Europe/Berlin')) print("Asia shanghai") print(ts.index.tz_localize('Asia/Shanghai')) print(ts) # 11.4.2时区感知时间戳对象的操作 stamp = pd.Timestamp('2011-03-12 04:00') stamp_utc = stamp.tz_localize('utc')
ts2 = Series(np.random.randn(20), index=pd.date_range('1/15/2000', periods=20, freq='4d')) #计算当月的平均值并赋给当月最后一个日期 ts2.groupby(offset.rollforward).mean() #时区处理 #查看所有时区 pytz.common_timezones #本地化和转换 #生成时间序列 rng = pd.date_range('3/9/2012 9:30', periods=6, freq='D') #以时间序列rng作为index构建Series ts3 = Series(np.random.randn(len(rng)), index=rng) #时区化、本地化 #将'3/9/2012 9:30'及后面的6个时间赋给UTC时区,UTC默认永远是0时区 ts3_utc = ts3.tz_localize('UTC') #转化到别的时区 ts3_utc.tz_convert('US/Eastern') #将'3/9/2012 9:30'及后面的6个时间赋给美国东部时区,但UTC仍为0时区 ts3_eastern = ts3.tz_localize('US/Eastern') #验证UTC仍为0时区 ts3_eastern.tz_convert('UTC') #操作时区意识型Timestamp对象 stamp = pd.Timestamp('2011-03-12 04:00') #Timestamp对象也可以时区化 stamp_utc = stamp.tz_localize('utc') #查看美国东部时间 stamp_utc.tz_convert('US/Eastern') #创建Timestamp时还可以传入一个时区信息,此时仍是以UTC作为0时区 stamp_moscow = pd.Timestamp('2011-03-12 04:00', tz='Europe/Moscow')
rng = pd.date_range('1/2/2011 9:30', periods=6, freq='D') ts = Series(np.random.randn(6), index=rng) ts # In[5]: print(ts.index.tz) # In[6]: pd.date_range('1/2/2011 9:30', periods=6, freq='D', tz='UTC') # In[7]: ts_utc = ts.tz_localize('UTC') # In[8]: ts_utc # In[9]: ts_utc.tz_convert('US/Eastern') # In[10]: ts_eastern = ts.tz_localize('US/Eastern') ts_eastern.tz_convert('Europe/Berlin') # ### 操作时区意识型TimeStamp对象
# pandas中方法既可以接受时区名, 也可以接受时区对象, 建议只用时区名 # 本地化和转化 # pandas中时间序列默认是 单纯的(naive)时区 rng = pd.date_range('3/9/2012 9:30', periods=6, freq='D') ts = Series(np.random.randn(len(rng)), index=rng) # tz字段索引为None print ts.index.tz # 在生成日期范围的时候可以加上一个时区集 print pd.date_range('3/9/2012 9:30', periods=10, freq='D', tz='UTC') # 从单纯(naive)到本地化的转换是通过tz_localize方法 ts_utc = ts.tz_localize('UTC') print ts_utc print ts_utc.index # 被本地化后, 可以通过tz_convert转换到别的时区 print ts_utc.tz_convert('US/Eastern') # 对于跨越夏令时转变期, 我们可以先本地化到EST,然后在转换到UTC或者柏林时间 ts_eastern = ts.tz_localize('US/Eastern') print ts_eastern.tz_convert('UTC') print ts_eastern.tz_convert('Europe/Berlin') # 下面的也是DatetimeIndex的实例方法 print ts.index.tz_localize('Asia/Shanghai')