熊猫时间序列索引从词典列表

时间:2014-07-17 01:56:24

标签: python dictionary pandas time-series

我正在尝试使用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?

3 个答案:

答案 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