2016-11-29 3 views
1

Ich lese eine CSV mit Datumswerte ohne Zeitzonendaten, aber sobald ich die Datetime-Spalte als Index verwende, wird ein (n falscher) Zeitzonenoffset hinzugefügt. Wie kann ich das verhindern?Einstellen der Datetime64-Reihe als Pandas-Dataframe-Index fügt automatisch Zeitzonen-Offset hinzu

Die Daten:

Time (UTC),Open,High,Low,Close,Volume 
2005.01.03 00:00:00,1.8275,1.858,1.7971,1.819,41998.5 
2005.01.10 00:00:00,1.8095,1.8376,1.771,1.766,46353.9 

Es ist wöchentlich EHTS- Daten.

import pandas as pd 
df = pd.read_csv("test.csv", parse_dates=["Time (UTC)"]) 

Nach Einlesen der Daten gibt es keine Zeitzonen:

in: 
df["Time (UTC)"].head(2) 
out: 
0 1973-02-26 
1 1973-03-05 
Name: Time (UTC), dtype: datetime64[ns] 

Aber wenn ich diese Daten als Index gesetzt, versetzt eine Zeitzone hinzugefügt wird:

in: 
df.index = df["Time (UTC)"] 
df.index.values[:1] 
out: 
array(['1973-02-26T01:00:00.000000000+0100'], dtype='datetime64[ns]') 

df.index mit Ich bekomme das dtype='datetime64[ns]' zurück, also wird keine Zeitzone hinzugefügt, obwohl ein Zeitzonen-Offset hinzugefügt wurde (was übrigens scheint, auch Sommerzeit zu haben). Wenn ich die Zeitzone auf UTC mit df = df.tz_localize("UTC") einstelle, zeigt df.index mich dtype = 'datetime64[ns, UTC]' an. Es hat jedoch keine Auswirkungen auf die Offsets.

Da ich weiß, in welcher Zeitzone sich die Daten befinden, brauche ich keinen Zeitzonen-Offset, noch viel weniger einen falschen, der wahrscheinlich auf der Zeitzone meiner Maschinen basiert. Ich hätte lieber ["Time (UTC)"] Spalte als Index bei der Verwendung von pd.read_csv aus Leistungsgründen gesetzt, aber ich bekomme das gleiche Verhalten, wenn Sie das tun.

Wie kann ich verhindern, dass ein Zeitzonenoffset hinzugefügt wird, oder den richtigen setzen?

Meine Python-Version ist 2.7.11 (Anaconda 2.5.0 64 Bit), Pandas Version ist 0.17.1, numpy 1.10.4.

Antwort

3

Dies ist nur ein Problem mit der Anzeige - Ihre Daten sind immer noch Zeitzone-naiv, es ist nur, dass numpy einen Offset im Rep darstellt.

Wenn Sie auf ein neueres numpy (1.11+) aktualisieren, wird das Anzeigeproblem behoben.

In [31]: np.__version__ 
Out[31]: '1.11.1' 

In [32]: df.index.values[:1] 
Out[32]: array(['2005-01-03T00:00:00.000000000'], dtype='datetime64[ns]') 
Verwandte Themen