如何将 Expect data.index 作为 DatetimeIndex 处理?

问题描述

我打算从比特币数据中获取烛台图。 这是我在加载 csv 文件后选择我想要的数据框的代码

df['Date'] = pd.to_datetime(df['Date'])
start_date = '2016-02-27'
end_date = '2021-02-27'
mask = (df['Date'] >= start_date) & (df['Date'] <= end_date)
df = df.loc[mask]
df

然后,我输入了制作烛台图的代码,如下所示:

import matplotlib.pyplot as plt
! pip install --upgrade mplfinance
import mplfinance as mpf
import matplotlib.dates as mpl_dates


mpf.plot(df,type = 'candle',style = 'charles',title = 'Bitcoin Price',ylabel = 'Price (USD$)',volume = True,ylabel_lower = 'Shares \nTraded',mav = (3,6,9),savefig = 'chart-mplfinance.png')

它说“TypeError: Expect data.index as DatetimeIndex”。 所以我在谷歌上查找了这个解决方案并尝试了这个:

df = dict()
df['Date'] = []
df['High'] = []
df['Low'] = []
df['Open'] = []
df['Close'] = []
df['Volume'] = []
for dict in df:
    df['Date'].append(datetime.datetime.fromtimestamp(t).strftime('%Y-%m-%d %H:%M:%s')
    df['High'].append(dict['High'])
    df['Low'].append(dict['Low'])
    df['Open'].append(dict['Open'])
    df['Close'].append(dict['Close'])
    df['Volume'].append(dict['Vol'])
print("df:",df)
pdata = pd.DataFrame.from_dict(df) 
pdata.set_index('Date',inplace=True)
mpf.plot(pdata)

这一次,它说“无效语法” 我不确定我哪里出错了,有什么我遗漏的吗?

解决方法

有两种简单的方法可以确保您的数据框将 pandas.DatetimeIndex 作为数据框索引:

  1. 调用 read_csv() 时指示您要用于索引的列(应该包含日期/日期时间的列),并设置 kwarg {{ 1}}.

    这将自动将日期时间列(通常是 csv 文件中的字符串)转换为 parse_dates=True 对象,并将其设置为索引

    您可以在 mplfinance 存储库的示例中看到此操作,for example,click here,and look under basic usage 您可以在对 { 的调用中看到 DatetimeIndex {1}}.


  2. 使用 index_col=0,parse_dates=True 构造函数。

    例如,而不是你写的,
    read_csv()你会写:

pandas.DatetimeIndex()

附带说明,一旦数据帧具有 DatetimeIndex,您就不需要下一段代码中的 df['Date'] = pd.to_datetime(df['Date']),但可以简单地切片,如下所示:

    df.index = pd.DatetimeIndex(df['Date'])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...