Tôi có thể tạo lại lỗi với dữ liệu sau:
idx0 = pd.date_range('2011-11-11', periods=4)
idx1 = idx0.tz_localize(tz.tzutc())
idx2 = idx1.tz_convert(tz.tzlocal())
df = pd.DataFrame([1, 2, 3, 4])
df.groupby(idx2).sum()
Out[20]:
0
1970-01-01 00:00:00-05:00 9
2011-11-10 19:00:00-05:00 1
Đó là một lỗi sâu trong mã gấu trúc, chỉ liên quan đến tz.tzlocal()
. Nó cũng thể hiện trong:
idx2.tz_localize(None)
Out[27]:
DatetimeIndex(['2011-11-10 19:00:00', '1970-01-01 00:00:00',
'1970-01-01 00:00:00', '1970-01-01 00:00:00'],
dtype='datetime64[ns]', freq='D')
Bạn có thể sử dụng bất kỳ giải pháp nào sau đây:
-
sử dụng rõ ràng múi giờ của bạn dưới dạng chuỗi:
idx2 = idx1.tz_convert(tz='Europe/Dublin') df.groupby(idx2).sum() Out[29]: 0 2011-11-11 00:00:00+00:00 1 2011-11-12 00:00:00+00:00 2 2011-11-13 00:00:00+00:00 3 2011-11-14 00:00:00+00:00 4
hoặc nếu nó không hoạt động:
idx2 = idx1.tz_convert(tz.gettz('Europe/Dublin'))
-
chuyển đổi nó thành một đối tượng:
df.groupby(idx2.astype(object)).sum() Out[32]: 0 2011-11-10 19:00:00-05:00 1 2011-11-11 19:00:00-05:00 2 2011-11-12 19:00:00-05:00 3 2011-11-13 19:00:00-05:00 4
Về cơ bản, chuyển đổi sang bất kỳ thứ gì khác ngoài DatetimeIndex với tz=tz.local()
sẽ hoạt động.
CHỈNH SỬA: lỗi này vừa được sửa trên github pandas. Bản sửa lỗi sẽ có sẵn trong bản phát hành pandas 0.19.