如何解决Python中用datetime对象调用yfinance API获取股票数据报错问题
yfinance download方法日期参数报错解决办法
yfinance的download方法对start和end参数的格式有明确要求,直接传datetime或Timestamp对象容易因为格式/时区问题报错,以下是可行的解决方式:
将日期对象转为"YYYY-MM-DD"格式字符串
这是最稳妥的方式,不管是datetime还是Timestamp对象,都可以通过字符串格式化解决:# 处理datetime对象 from datetime import datetime import yfinance as yf start_dt = datetime(2023, 1, 1) end_dt = datetime(2023, 12, 31) data = yf.download("AAPL", start=start_dt.strftime("%Y-%m-%d"), end=end_dt.strftime("%Y-%m-%d"))# 处理Timestamp对象 import pandas as pd import yfinance as yf start_ts = pd.Timestamp("2023-01-01") end_ts = pd.Timestamp("2023-12-31") data = yf.download("AAPL", start=str(start_ts.date()), end=str(end_ts.date()))直接传入日期字符串
跳过对象转换环节,直接用"YYYY-MM-DD"格式的字符串作为参数,彻底避免转换问题:import yfinance as yf data = yf.download("AAPL", start="2023-01-01", end="2023-12-31")处理时区问题
如果你的datetime/Timestamp对象带有时区信息,先移除时区再转换格式:from datetime import datetime, timezone import yfinance as yf start_dt = datetime(2023, 1, 1, tzinfo=timezone.utc) # 移除时区转为 naive datetime start_naive = start_dt.replace(tzinfo=None) data = yf.download("AAPL", start=start_naive.strftime("%Y-%m-%d"), end="2023-12-31")
内容的提问来源于stack exchange,提问作者Kunal Kodnani
相关产品推荐
相关产品推荐

