Pandas DataFrame:测试是否设置了索引

时间:2017-12-05 09:09:23

标签: python pandas datetime dataframe

我有一个包含多列的DataFrame,其中一列属于datetime类型。有时,此列通过 df.set_index(...)用作索引。

在其他情况下,我需要重置该索引以保留datetime列。现在我正在寻找一种方法来检查数据帧是否有默认索引。我试过这个,但这并不适用于所有情况:

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

我可以测试索引是否是datetime类型,但我真的想知道是否有像 df.is_index_set()这样的常规方法。有什么建议吗?

1 个答案:

答案 0 :(得分:3)

您不应测试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

因此,默认索引为pd.RangeIndex,如果您的索引为DatetimeIndex,则只需拨打is_all_dates或与pd.DatetimeIndex进行比较

即使将索引设置为单调的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')