2014-01-09 4 views
9

Wenn ich type auf einem DataFrame verwenden, die ich kenne einen Datetime-Index hat, erhalte ich:Wie kann ich testen, ob ein Objekt ein Pandas Datetime Index ist?

In [17]: type(df.index) 
Out[17]: pandas.tseries.index.DatetimeIndex 

aber wenn ich es testen, die ich erhalten:

In [18]: type(df.index) == 'pandas.tseries.index.DatetimeIndex' 
Out[18]: False 

Ich weiß, dass ich davon ausgegangen, die Art der Typ ist eine Zeichenkette, aber ich weiß wirklich nicht, was ich sonst noch versuchen sollte, und die Suche hat nichts ergeben.

Antwort

14

Sie können isinstance der DatetimeIndex-Klasse verwenden:

In [11]: dates = pd.date_range('20130101', periods=6) 

In [12]: dates 
Out[12]: 
<class 'pandas.tseries.index.DatetimeIndex'> 
[2013-01-01 00:00:00, ..., 2013-01-06 00:00:00] 
Length: 6, Freq: D, Timezone: None 

In [13]: isinstance(dates, pd.DatetimeIndex) 
Out[13]: True 
+4

Ich würde gerne denken, dass ich einen langen Weg gegangen bin, seit ich diese Frage gestellt habe ... (-: – piRSquared

5

Wofür haben Sie Pandas importiert?

Wenn Sie im Anschluss an die Führung in der Dokumentation und taten so etwas wie:

import pandas as pd 
dates = pd.date_range('20130101', periods=6) 

type(dates[0]) 
pandas.tslib.TimestampTimestamp('2013-01-01 00:00:00', tz=None) 

type(dates[0]) == pandas.tslib.Timestamp 
False 
# this throws NameError since you didn't import as pandas 

type(dates[0]) == pd.tslib.Timestamp 
True 
# this works because we imported Pandas as pd 

Aus Gewohnheit ich schon erwähnt, vernachlässigte wie @ M4rtini hervorgehoben, dass Sie sollten nicht eine Zeichenfolge verwenden Äquivalenz zu vergleichen.

+1

Die Lösung gegen einen String nicht zu vergleichen, aber das Objekt – M4rtini

+0

Danke. Ich hatte 2 Fehlerpunkte. Das String-Bit, das mir bekannt war, wusste aber nicht, was ich noch versuchen sollte, wenn ich versuchte, gegen pandas.tseries.index.DatetimeIndex zu testen. Testen gegen pd.tseries.index.DatetimeIndex, wie ich es importiert habe, hat den Trick gemacht. – piRSquared

+4

Dies überprüft nicht, ob Datumsangaben ein DatetimeIndex sind, nur dass x [0] ein Timestamp ist ... es könnte eine Liste oder Serie sein usw. Mit 0th item a Timestamp. –

3
In [102]: type("asd") == str 
Out[102]: True 

In [103]: type("asd") == "str" 
Out[103]: False 

Vergleichen Sie mit dem Objekt, keine Zeichenfolge.

Verwandte Themen