python - Pandas 数据帧 : test if index name is set

标签 python pandas datetime dataframe

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

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

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

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

最佳答案

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

关于python - Pandas 数据帧 : test if index name is set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47649776/

相关文章:

python - 列表对象转换为整数

java - 无法在 Python 3.5 中从 PyQt5 导入 QWebPage

python - 寻找更好的方法来处理 python 中的更新请求

mysql - 从 MySQL 将 500 万行数据加载到 Pandas

python-3.x - 如何使用Python从csv文件中删除日期除2020年以外的元素?

c# - 如何在 C# 中的特定确切时间(离现在很远)执行代码?

c# - 哪些定时器依赖于系统时间?

python - 如何在两个 float 之间插入运算符号并计算结果?

python - 用 Pandas 计算值

php - 日期时间转换 : "The timezone could not be found in the database"