Pandas 将datetime指定为索引不会提供DatetimeIndex

Pandas 将datetime指定为索引不会提供DatetimeIndex,pandas,datetimeindex,Pandas,Datetimeindex,我的df有一个名为“天”的字段。我需要从“天”和startdate创建一个datetime。可能很麻烦,但它可以工作: for t in df.index: df.loc[t,'date']=datetime.date(startdate)+ datetime.timedelta(days=df.loc[t,'days']) df.index=df.date 当我尝试增加样本时: udf=df.resample('M',how='sum') 我得到: TypeError:仅对

我的df有一个名为“天”的字段。我需要从“天”和startdate创建一个datetime。可能很麻烦,但它可以工作:

for t in df.index:
    df.loc[t,'date']=datetime.date(startdate)+
    datetime.timedelta(days=df.loc[t,'days'])
df.index=df.date
当我尝试增加样本时:

udf=df.resample('M',how='sum')
我得到:

TypeError:仅对DatetimeIndex、TimedeltaIndex或 PeriodIndex,但获得了“Index”的实例

如果我使用datetime字段设置索引,为什么索引不成为datetime索引(或“DatetimeIndex”)?“date”和索引中的每个条目都是datetime,不是吗

type(df.date[0])
<type 'datetime.date'>

type(df.index[0])
<type 'datetime.date'>

但是我找不到任何解释来解释为什么将现有日期时间分配给索引不起作用,而是通过pd.to_datetime(df.index)将现有日期时间(df.index)转换为日期时间不会。

熊猫不会将python本机
datetime
对象转换为
Timestamp
对象,从中可以创建
datetimeindexs
。阅读文档会有所帮助

问题在于,为日期列设置
datetime
对象不会创建
Timestamp
对象。熊猫
Timestamp
是熊猫的替代品
datetime.datetime

时间戳相当于python的Datetime,在大多数情况下可以与之互换。它是用于组成DatetimeIndex的条目以及pandas中其他面向时间序列的数据结构的类型

查看文档

df = pd.DataFrame(np.random.randn(10,4), columns = list('abcd')) # sample df
df.index = pd.date_range(start='2018-1-1', end='2018-1-10') # use pandas to create a date range and set index
df['date'] = pd.date_range(start='2018-1-1', end='2018-1-10') # also set as column values
print(f"date column type: {type(df['date'][0])}\ndate index type: {type(df.index)}\n")

df['date'] = df['date'].apply(lambda x: datetime.date(x)) # convert pandas timestamp to datetime.date
print(f"type for datetime.date: {type(df['date'][0])}")

df.set_index('date', inplace=True) # set datetime.date as index
print(f"type for datetime.date as index: {type(df.index)}")
输出:

日期列类型:
日期索引类型:
datetime.date的类型:
datetime.date作为索引的类型:
见第一和第三输出:

vs

df = pd.DataFrame(np.random.randn(10,4), columns = list('abcd')) # sample df
df.index = pd.date_range(start='2018-1-1', end='2018-1-10') # use pandas to create a date range and set index
df['date'] = pd.date_range(start='2018-1-1', end='2018-1-10') # also set as column values
print(f"date column type: {type(df['date'][0])}\ndate index type: {type(df.index)}\n")

df['date'] = df['date'].apply(lambda x: datetime.date(x)) # convert pandas timestamp to datetime.date
print(f"type for datetime.date: {type(df['date'][0])}")

df.set_index('date', inplace=True) # set datetime.date as index
print(f"type for datetime.date as index: {type(df.index)}")
date column type: <class 'pandas._libs.tslibs.timestamps.Timestamp'>
date index type: <class 'pandas.core.indexes.datetimes.DatetimeIndex'>

type for datetime.date: <class 'datetime.date'>
type for datetime.date as index: <class 'pandas.core.indexes.base.Index'>