从字典列表创建 Pandas 时间序列索引

3

我正在尝试使用Python中的pandas库进行时间序列分析。 我的数据现在存储为一个字典列表:

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?


1
尝试一下:df.index = pd.to_datetime(df.index) - fast tooth
3个回答

3

在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')

请确保您正在运行最新版本。 但是,0.11及以下版本在抛出与DateTimeIndex相关的错误方面更加苛刻(且不太有帮助)。


2
你也可以直接将索引转换为 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

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接