【问题标题】:Python Pandas: Resampling on Jalali datetime indicesPython Pandas:对 Jalali 日期时间索引进行重采样
【发布时间】:2021-08-13 06:57:24
【问题描述】:

我想知道如何对 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 日历中每月的最后一天,如实施 here

【问题讨论】:

  • 尝试pd.DataFrame(index=pd.to_datetime(date), columns=[]) 然后df.resample('M')
  • @AnuragDabas 感谢您的评论,但 pd.to_datetime() 不能应用于 khayyam 日期时间:TypeError: <class 'khayyam.jalali_date.JalaliDate'> is not convertible to datetime

标签: python pandas dataframe python-datetime jalali-calendar


【解决方案1】:

IIUC:

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

使用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

【讨论】:

  • df.index = [x.todate() for x in df.index] 剂量相同。
  • @sci9 是的,你也可以这样做 df.index=pd.to_datetime([x.todate() for x in df.index])df.index=[pd.to_datetime(x.todate()) for x in df.index] 这取决于你
  • 感谢您的回答,但结果 df 根据格鲁吉亚历的最后一个月计算聚合:Index: [2020-07-31 00:00:00, 2020-08-31 00:00:00, 2020-09-30 00:00:00
  • @sci9 因为 'JalaliDate' 月 '5' 对应于 'Georgian' 月 '7' 并且喜欢这种年和日的变化,所以我认为它正确计算了聚合
猜你喜欢
  • 2020-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-06-10
  • 2020-12-12
  • 2017-08-13
  • 2012-08-24
  • 1970-01-01
  • 2019-06-22
相关资源
最近更新 更多