2017-12-05 2 views
1

Ich habe ein DataFrame mit mehreren Spalten, von denen eine vom Typ datetime ist. Manchmal wird diese Spalte als Index über df.set_index (...) verwendet.Pandas DataFrame: Test, wenn Index gesetzt ist

Bei anderen Gelegenheiten muss ich diesen Index zurücksetzen, um die Datetime-Spalte zu behalten. Jetzt suche ich nach einer Möglichkeit, zu überprüfen, ob der Datenrahmen einen Standardindex hat oder nicht. Ich habe versucht, diese, aber das funktioniert nicht für alle Fälle:

if df.index.name is not None: 
    df.reset_index(inplace=True) 

konnte ich testen, ob der Index vom Typ Datetime ist, aber ich frage mich wirklich, ob es eine allgemeine Methode, wie df.is_index_set ist(). Irgendwelche Empfehlungen?

+0

Datenframes * immer * haben einen Index, Ihre Frage macht keinen Sinn Derzeit wollen Sie nur den Index 'dtype' testen? Auch ein Index ist standardmäßig unbenannt, so dass das erneute Testen keinen Sinn ergibt. – EdChum

+0

Ich weiß, dass es immer einen Index gibt. Aber das ist die Standard-Integer-basierte. Gibt es keine Methode zu testen, ob ein anderer Index im Code gesetzt wurde? – Matthias

+1

Sie wollen also nur testen ob der Index der Standard 'RangeIndex' ist? Sie können einfach tun 'type (df.index) == pd.RangeIndex' – EdChum

Antwort

1

Sie sollten das index.name Attribut nicht testen, da es nicht in allen Szenarien festgelegt ist. Sie können folgende Tests durchführen:

In[13]: 

df = pd.DataFrame(np.random.randn(5,3), columns=list('abc')) 
type(df.index) == pd.RangeIndex 

Out[13]: True 

In[14]:  
df = pd.DataFrame(np.random.randn(5,3), columns=list('abc'), index=pd.date_range(dt.datetime(2017,1,1), periods=5)) 
df.index.is_all_dates 

Out[14]: True 

So ist der Standardindex ein pd.RangeIndex ist, wenn Ihr Index ein DatetimeIndex ist, können Sie nur is_all_dates anrufen oder vergleichen gegen pd.DatetimeIndex

Die erste Methode wird behandeln, auch wenn Sie eingestellt der Index in eine int-Säule, die monotonen ist:

In[27]: 
df = pd.DataFrame({'a':[0,1,2,3,4], 'b':35,'c':np.random.randn(5)}) 
df = df.set_index('a') 
type(df.index) == pd.RangeIndex 

Out[27]: False 

der Index dtype hier ist eine Int64Index:

In[28]: 
df.index 

Out[28]: Int64Index([0, 1, 2, 3, 4], dtype='int64', name='a') 
Verwandte Themen