【问题标题】:How can I deal with Expect data.index as DatetimeIndex?如何将 Expect data.index 作为 DatetimeIndex 处理?
【发布时间】:2021-12-14 20:34:58
【问题描述】:

我计划从比特币数据中获取烛台图。 这是我在加载 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)

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

【问题讨论】:

    标签: python python-3.x mplfinance


    【解决方案1】:

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

    1. 在调用read_csv() 时,请指明您要使用哪个列作为索引(应该包含日期/日期时间的列),并设置kwarg parse_dates=True

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

      您可以看到这是在 mplfinance 存储库 for example, click here, and look under basic usage 的示例中完成的,您可以在其中看到 index_col=0, parse_dates=True 在对 read_csv() 的调用中。
       
       

    2. 使用pandas.DatetimeIndex() 构造函数。
       
      例如,而不是你写的,
      df['Date'] = pd.to_datetime(df['Date'])你会写:

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

    附带说明,一旦数据帧具有 DatetimeIndex,您就不需要在下一段代码中使用 mask,而是可以简单地 slice,如下所示:

    start_date = '2016-02-27'
    end_date   = '2021-02-27'
    df = df.loc[start_date:end_date]
    

    第一次。

    【讨论】:

      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 2017-01-12
      • 2012-06-18
      • 2014-10-06
      • 2018-06-23
      • 1970-01-01
      • 2015-09-08
      相关资源
      最近更新 更多