将loc与DatetimeIndex中的列表一起使用会返回错误

时间:2020-09-24 15:37:15

标签: datetimeindex loc

当我创建一个带有date_range()的DatetimeIndex对象,并将datelabel的列表提供给loc [[]]时,返回错误。我从未对loc中的indexlabel列表有任何问题。 简单的代码示例(Jupyter Notebook中的python 3):

import pandas as pd
import numpy as np

#Create DatetimeIndex with date_range()
dates=pd.date_range(start="2020-01-01", end="2020-01-10", freq="D", name="datum")

#Check type and dtype: all OK
display(dates.dtype)
display(type(dates))
display(np.dtype('datetime64[ns]') == np.dtype('<M8[ns]'))#returns True on my machine

#create Serie s and DataFrame df with data in 'values' column
values=[100,200,300,400,500,600,700,800,900,1000]
s=pd.Series(data=values,index=dates)
#df=s.to_frame(name="values")# create df from Series s works fine too
df=pd.DataFrame(data=values, index=dates,columns=["values"])

#display some loc() and iloc() extractions: all OK
display(s,
        df,
        df.loc["2020-01-08"],
        df.iloc[[2,8]],
        df.loc["2020-01-02":"2020-01-08"])

到目前为止一切顺利。但是,当我尝试使用indexlabels列表进行提取时:

df.loc[['2020-01-02','2020-01-08']]

错误: KeyError:“ [Index([(''2020-01-03','2020-01-03')],dtype ='object',name ='datum')都不存在]返回[index]中的。似乎dtype已从DatetimeIndex对象更改为Object(= str)?我在stackoverflow上找到了解决方法:

df.loc[pd.to_datetime(["2020-01-02","2020-01-08"])

,但随后删除索引列名称“ datum”。为了重新获得列名,我将df.loc [....]分配给了一个变量,然后使用index属性重新输入了该名称。因此,完整的解决方法是:

var=df.loc[pd.to_datetime(["2020-01-02","2020-01-08"])]
var.index.name="datum"
var

在我看来,这似乎与loc [[]]与其他索引标签的工作方式不一致。我想念什么吗?

0 个答案:

没有答案