【问题标题】:Pandas DataFrame: test if index name is setPandas DataFrame:测试是否设置了索引名称
【发布时间】:2018-05-18 21:17:45
【问题描述】:

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

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

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

我可以测试索引是否为日期时间类型,但我真的想知道是否有像 df.is_index_set() 这样的通用方法。有什么建议吗?

【问题讨论】:

    标签: python pandas datetime dataframe


    【解决方案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
    

    所以默认索引是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
    

    索引dtype这里是Int64Index

    In[28]:
    df.index
    
    Out[28]: Int64Index([0, 1, 2, 3, 4], dtype='int64', name='a')
    

    【讨论】:

      猜你喜欢
      • 2016-10-24
      • 2020-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多