0

我想知道如何对 DateTimeIndex、TimedeltaIndex 或 PeriodIndex 以外的 DateTime 索引进行重采样?

from datetime import timedelta
from khayyam import JalaliDate, JalaliDatetime
import pandas as pd

start_date_jalali = JalaliDate(1399, 5, 1)
end_date_jalali = JalaliDate(1400, 5, 31)
date = [start_date_jalali + timedelta(days=i) for i in range((end_date_jalali - start_date_jalali).days + 1)]
df = pd.DataFrame(index=date, columns=[])
df.index.name = 'Date'

df.resample('M')
TypeError: Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'

我认为一个简单的解决方法是将 Jalali 日期转换为格鲁吉亚日期,然后对它们应用重新采样,其中格鲁吉亚每个时期的结束必须是 Jalali 日历中每月的最后一天,如此处所实现

4

1 回答 1

1

国际大学联盟:

这就是错误所说的尝试将您的索引转换为日期时间:

使用map()+todate()方法将“JalaliDate”转换为“datetime64”,然后resample()

df.index=pd.to_datetime(df.index.map(lambda x:x.todate()))
#Finally:
df.resample('M')
#Further do calculations

或者

将您的列表理解更改为:

date=[pd.to_datetime((start_date_jalali + timedelta(days=i)).todate()) for i in range((end_date_jalali - start_date_jalali).days + 1)]

#Finally:
df = pd.DataFrame(index=date, columns=[])
df.index.name = 'Date'
df.resample('M')
#Further do calculations
于 2021-08-13T07:27:35.597 回答