首页 > 解决方案 > 如何在 Python 中加载 Statsmodels 数据集?

问题描述

正如我在教程中看到的那样,我正在尝试加载 statsmodels 数据集,但我不断收到错误消息。

import statsmodels as sm
import pandas as pd

data = sm.datasets.co2.load_pandas()
co2 = data.data

co2['ds'] = co2.index
co2.rename(columns={'co2': 'y'}, inplace=True)

co2.tail()

这是我得到的错误:

TypeError: new () got an unexpected keyword argument 'format'

标签: pythonpandasstatsmodels

解决方案


看来问题出在原函数“load_pandas”上,新版本的pd.DatetimeIndex中不再存在“format”参数,详情请参考https://pandas.pydata.org/pandas-docs/version/ 0.23.4/generated/pandas.DatetimeIndex.html

  def load_pandas():
    data = load()
    # pandas <= 0.12.0 fails in the to_datetime regex on Python 3
    index = pd.DatetimeIndex(start=data.data['date'][0].decode('utf-8'),
                             periods=len(data.data), format='%Y%m%d',
                             freq='W-SAT')
    dataset = pd.DataFrame(data.data['co2'], index=index, columns=['co2'])
    #NOTE: this is how I got the missing values in co2.csv
    #new_index = pd.DatetimeIndex(start='1958-3-29', end=index[-1],
    #                             freq='W-SAT')
    #data.data = dataset.reindex(new_index)
    data.data = dataset
    return data

所以我解决这个问题的解决方案如下:

  1. 将数据加载到 pandas DataFrame

    co2 = pd.DataFrame(sm.datasets.co2.load().data)

  2. 将字节转换为字符串,然后转换为日期时间

    co2['date'] = pd.to_datetime(co2.date.apply(lambda x: x.decode("utf-8")))

  3. 将日期设置为索引

    co2.set_index('date',inplace=True)

输出: 在此处输入图像描述


推荐阅读