Only valid with DatetimeIndex, TimedeltaIndex or PeriodIndex, but got an instance of 'Index'2. 背景
需要以date作为分组依据,求均值。
grouper = pd.Grouper(freq=’D‘)) # 根据freq的值建立分组列表,D表示天 data.reset_index().set_index('date').groupby(grouper).mean() # data是一个dataframe的数据
data数据表example如下:
asset | factor | |
---|---|---|
date | ||
2015-01-15 | A | 0.25 |
2015-01-15 | B | 0.58 |
2015-01-16 | A | 0.89 |
2015-01-16 | B | 0.36 |
在pandas中,作为index的列会下沉显示,不再归为column
当data数据表由函数计算得出时,放入函数中不会报错,可以运行。
当把data数据表以csv的形式储存,再读取并重新设置date为index,放入函数中,报错。
data = data.set_index('date')3. 原因
根据提示,报错原因时进行运算的dataframe要求时datetime index形式,而传入的只是index
这是因为数据表存入csv后,失去了数据列表的详细信息,比如全部都变成了column,没有了index的信息,需要重新设置。且列数据的数据类型也丢失了,所以经过set_index后,只是index,而不是datetime index
4. 解决方案在set_index之前或者之后,把date列转为datetime的形式。
# 先转为datetime data = data.set_index('date') data.index = pd.to_datetime(data.index) # 先设置index data['date'] = pd.to_datetimedata['date']) data = data.set_index('date')5. 碎碎念
啊!终于找到了!