1. 报错提示
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_datetime(data['date'])
data = data.set_index('date')
5. 碎碎念
啊!终于找到了!😤

博客围绕pandas中以date作为分组依据求均值时的报错问题展开。当data数据表由函数计算得出,放入函数可正常运行;但以csv形式储存再读取并重新设置date为index后放入函数则报错。原因是存入csv后丢失数据详细信息,解决方案是在set_index前后将date列转为datetime形式。
1444

被折叠的 条评论
为什么被折叠?



