2012-10-23 30 views
6

Khi vẽ một khoảng thời gian với chức năng cốt truyện tích hợp của gấu trúc, dường như bỏ qua múi giờ của chỉ mục của tôi: nó luôn sử dụng thời gian UTC cho trục x. Một ví dụ:Chức năng cốt truyện của Pandas bỏ qua múi giờ của khoảng thời gian

import numpy as np 
import matplotlib.pyplot as plt 
from pandas import rolling_mean, DataFrame, date_range 

rng = date_range('1/1/2011', periods=200, freq='S', tz="UTC") 
data = DataFrame(np.random.randn(len(rng), 3), index=rng, columns=['A', 'B', 'C']) 
data_cet = data.tz_convert("CET") 

# plot with data in UTC timezone 
fig, ax = plt.subplots() 
data[["A", "B"]].plot(ax=ax, grid=True) 
plt.show() 

# plot with data in CET timezone, but the x-axis remains the same as above 
fig, ax = plt.subplots() 
data_cet[["A", "B"]].plot(ax=ax, grid=True) 
plt.show() 

Cốt truyện không thay đổi, mặc dù chỉ số có:

In [11]: data.index[0] 
Out[11]: <Timestamp: 2011-01-01 00:00:00+0000 UTC, tz=UTC> 
In [12]: data_cet.index[0] 
Out[12]: <Timestamp: 2011-01-01 01:00:00+0100 CET, tz=CET> 

Tôi có nên nộp một lỗi, hoặc để tôi bỏ lỡ một cái gì đó?

+0

[Đây] (https://stackoverflow.com/a/46554146/2192488) là làm thế nào lỗi này có thể bị phá vỡ! –

Trả lời

5

Đây chắc chắn là lỗi. Tôi đã tạo một báo cáo trên github. Lý do là vì nội bộ, gấu trúc chuyển đổi một DatetimeIndex thường xuyên thành PeriodIndex thành móc nối/định vị trong gấu trúc, và hiện tại PeriodIndex KHÔNG giữ lại thông tin múi giờ. Vui lòng tiếp tục theo dõi để khắc phục.

+3

4 năm sau ... bất kỳ sửa chữa nào? – lukewitmer

+0

5 năm sau và [sẽ không sửa lỗi!] (Https://github.com/pandas-dev/pandas/issues/2106#issuecomment-253302000) –

0

Làm thế nào để đối phó với UTC để chuyển đổi theo giờ địa phương

import time 
import matplotlib.dates 
… 
tz = pytz.timezone(time.tzname[0]) 
… 
ax.xaxis.set_major_locator(matplotlib.dates.HourLocator(interval=1, tz=tz)) 
ax.xaxis.set_major_formatter(matplotlib.dates.DateFormatter('%H', tz=tz)) 
Các vấn đề liên quan