2017-12-05 5 views
1

複数の列があり、datetime型のDataFrameがあります。場合によっては、この列はインデックスとしてdf.set_index(...)経由で使用されます。Pandas DataFrame:インデックスが設定されているかどうかのテスト

日時の列を保持するために、そのインデックスをリセットする必要があります。今、データフレームにデフォルトのインデックスがあるかどうかをチェックする方法を探しています。私はこれを試してみましたが、これはすべてのケースのために働いていません:インデックスはdatetime型のものであれば

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

は、私がテストすることができますが、df.is_index_set()のような一般的な方法があれば、私は本当に不思議。どんな勧告?

+0

dataframes *常にインデックスを持っていますが、あなたの質問は現在、インデックス 'dtype'をテストしたいだけですか?また、デフォルトではインデックスには名前が付けられていないので、これを再度テストすることは意味をなさない。 – EdChum

+0

インデックスが常にあることを知っている。しかし、これはデフォルトの整数ベースのものです。コードに別のインデックスが設定されているかどうかをテストする方法はありませんか? – Matthias

+1

インデックスがデフォルトの「RangeIndex」であるかどうかをテストしたいだけですか? 'type(df.index)== pd.RangeIndex'を実行することができます – EdChum

答えて

1

index.name属性はすべてのシナリオで設定されていないためテストしないでください。あなたは、次のテストを行うことができます。

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 

あなたのインデックスはあなただけの第1の方法は、あなたが設定されていても処理するis_all_datesを呼び出すかpd.DatetimeIndex

と比較することができますDatetimeIndexであれば、デフォルトのインデックスは、pd.RangeIndexです単調であるint型の列のインデックス:

:ここ

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 

インデックスdtypeInt64Indexです

In[28]: 
df.index 

Out[28]: Int64Index([0, 1, 2, 3, 4], dtype='int64', name='a') 
関連する問題