我正在尝试使用pandas库在python中进行时间序列分析。 我的数据现在存储为词典列表:
mydata = [
{
'date': datetime.date(2013, 1, 1),
'snow_depth': 1.0,
}, {
'date': datetime.date(2013, 1, 2),
'snow_depth': 2.5,
}, {
'date': datetime.date(2013, 1, 3),
'snow_depth': 8.0,
},
]
我使用以下命令获取DataFrame:
df = pd.DataFrame(mydata).set_index('date')
但是索引不被识别为DateTimeIndex,而只是作为对象:
df.index
返回:Index([2013-01-01, 2013-01-02, 2013-01-03], dtype='object')
所以,我不能在Pandas中做一些时间序列操作,比如按月累计等等。当我跑df.index
时,我期待得到类似的东西:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01, ..., 2013-01-03]
Length: 3, Freq: D, Timezone: None
当我要求索引为DateTimeIndex
时,如何从列表中创建DataFrame?
答案 0 :(得分:2)
您可以使用pandas.to_datetime()函数将类型自动转换为datetime。看看这个教程:http://pandas.pydata.org/pandas-docs/dev/timeseries.html 它有许多时间序列分析的基本用法。
答案 1 :(得分:2)
Pandas DateTimeIndex
可能有点特别。例如,它不喜欢datetime.date
值。但是,如果将它们更改为datetime.datetime
值,它将按预期工作。同样的呼号,甚至。
import datetime
import pandas as pd
mydata = [
{
'date': datetime.datetime(2013, 1, 1),
'snow_depth': 1.0,
}, {
'date': datetime.datetime(2013, 1, 2),
'snow_depth': 2.5,
}, {
'date': datetime.datetime(2013, 1, 3),
'snow_depth': 8.0,
},
]
df = pd.DataFrame(mydata).set_index('date')
确保您正在运行最新版本。关于抛出DateTimeIndex
相关错误,0.11及以下更为特别(并且帮助较少)。
答案 2 :(得分:1)
您也可以直接将索引转换为DatetimeIndex
:
In [159]: df.index = pd.DatetimeIndex(df.index)
In [160]: df.index
Out[160]:
<class 'pandas.tseries.index.DatetimeIndex'>
[2013-01-01, ..., 2013-01-03]
Length: 3, Freq: None, Timezone: None