Python 如何显示mplfinance下载数据的时间(索引类型datetime)

Python 如何显示mplfinance下载数据的时间(索引类型datetime),python,datetime,yahoo-finance,pandas-datareader,Python,Datetime,Yahoo Finance,Pandas Datareader,我的代码如下: import pandas_datareader as web import datetime as dt data = web.DataReader('AMZN', 'yahoo', dt.datetime(2021, 5, 3), dt.datetime(2021, 5, 5)) # read stock price of AMZN from Yahoo finance from 5/3/2021 to 5/5/2021 print(data) print(data.in

我的代码如下:

import pandas_datareader as web
import datetime as dt

data = web.DataReader('AMZN', 'yahoo', dt.datetime(2021, 5, 3), dt.datetime(2021, 5, 5))
# read stock price of AMZN from Yahoo finance from 5/3/2021 to 5/5/2021

print(data)
print(data.index)
print(data.index[0])
输出:

有趣的是,索引列不显示时间(其类型为datetime),请参见第一次打印。但是,如果我试图查看单个行,它确实包含时间(00:00:00,请参见第三次打印)。如何在将类型保持为datatime的同时将此时间包含到索引中?我不明白为什么索引栏里没有时间


除了好奇之外,我尝试这样做的第二个原因是我想查看数据的下载时间。

首先是一些更正:

  • 尽管您可能正在使用mplfinance可视化您的财务数据,但您正在使用Pandas DataReader下载它
  • 您的问题实际上是关于Pandas DatetimeIndex类的问题(mplfinance需要该类作为要绘制的数据帧的索引)
  • DatetimeIndex中的类型不是
    datetime.datetime
    ,而是
    numpy.datetime64
    。也就是说,如果您试图将其提取为
    data.index[0]
    ,那么pandas将返回type
    pandas.Timestamp
    。()
  • 回答您的问题:您看到的是Pandas DatetimeIndex的一个功能:如果它检测到DatetimeIndex中所有时间戳的时间部分都是00:00:00,那么为了节省空间和避免混淆,它将自动不打印时间部分。(另请参见有人询问如何删除时间部分。)

    关于Pandas DataReader,下载时间不会包含在数据框中,因为您请求的是每日数据(不是日内数据),所以每一行对应一个特定的日期,指的是该日期的整个交易日(开盘、高点、低点、收盘),而不是指特定的时间,因此,数据不会包含不同日期的时间(或将包含00:00:00)

    另外,我不确定你是否可以使用熊猫数据阅读器从“雅虎”那里获得日内数据。大概我不知道。但我相信您可以通过在通话中指定
    “av intraday”
    来获取日内数据

    p.p.S.我不明白你为什么想知道你实际下载数据的时间。也就是说,您可以在下载时获取当前时间,并将其存储在某个位置,例如:

    将数据读取器导入web
    将日期时间导入为dt
    data=web.DataReader(…)
    下载\u time=dt.datetime.now().strftime(“%D%H:%M:%S”)
    打印(下载时间)
    

    05/23/21 11:05:02

    非常感谢您的回答!首先,我需要查看下载时间的原因是我想在一小段时间内绘制图表,比如说,每10秒绘制一次。我想写一段代码来控制下载时间,并使用datetime.datetime.now()来显示下载时间。第二,我只是好奇,如果我想强制它显示时间00:00:00怎么办?在这里,我仍然希望类型是datetime64而不是string,因为我需要在以后绘制。您可以将时间转换为您想要的任何datetime类型。听起来你真的想要日内数据(每10秒一次)。你不应该重复要求每日数据,每10秒一次,只是时间戳到现在。“你不应该重复要求每日数据,每10秒一次,只是时间戳到现在。”——为了确认我正确理解你的观点,你的意思是我只是重复要求数据,而没有手动插入10秒“中断时间”?我使用[yfinance]()下载数据,最小时间间隔为1min,因此我想自己编写10秒的下载间隔。有没有更简单的方法?谢谢!我想说的是,在你问题的示例中,你要求的是每天3天的数据(不是当天)因此,无论您询问一次,还是每10秒询问一次,您都会得到3行数据,因此每10秒询问一次没有意义。如果您将
    yfinance
    interval='1m'
    一起使用,那么您每分钟只会获得一次新数据,因此再次调用
    yf.download()也没有意义
    每10秒一次。获取更频繁数据的方法有很多种,但我猜您可能需要为此频率付费。此外,如果您对每个数据进行交易决策的频率超过几分钟,您可能还需要查看买卖价格和大小。是的,您很可能只会获得交易价格和/或买卖价格(和大小),因此您必须选择一个间隔并构建自己的OHLC集(例如,请参见“”)