使用pandas和datetime仅更新yfinance的最新数据

7cwmlq89  于 2023-10-14  发布在  其他
关注(0)|答案(1)|浏览(138)

我有一个旧的cvs文件与此雅虎财经数据命名为'AAPL.csv'
| 日期|开放|高|低|密切|体积|
| --|--|--|--|--|--|
| 2023-09-25 2023-09-25 2023-09-25|一百七十四点一九|一百七十六点九七|174.14| 176.08| 46172700 |
| 2023-09-26|一百七十四点八二|一百七十五点一九|一百七十一点六六|一百七十一点九六| 64588900 |
| 2023-09-27 2023-09-27|一百七十二点六一|173.03|一百六十九点零五分|一百七十点四二| 66921800 |
| 2023-09-28 2023-09-28 2023-09-28|一百六十九点三三|172.02|一百六十七点六一|170.69| 56294400 |
| 2023-09-29 2023-09-29 2023-09-29| 172.02| 173.07|一百七十点三三|一百七十一点二一| 51814200 |
我需要检查今天的日期与最新的行日期和更新最新的天数据和保存在同一个文件。我有这个代码,但有一些日期格式的问题,不运行好。

import os
import datetime
import pandas as pd
import dateutil.parser
from datetime import datetime

read_data = pd.read_csv('AAPL.csv')
read_last_date_df = str(read_data['Date'].values[-1])
last_date_df = dateutil.parser.isoparse(read_last_date_df)

today = datetime.today()
dif_day_dates = int(today.strftime('%d')) - int(last_date_df.strftime('%d'))

if dif_day_dates > 0:
   update_data = yf.download(symbol, start=datetime.today() - last_date_df, end=datetime.today(), interval=timeframes_codedata['daily'])
   read_data[len(read_data)] = update_data
   read_data.to_csv('AAPL.csv')

现在我有这个错误:如果dif_day_dates > 0:TypeError:“datetime.timedelta”和“int”的示例之间不支持“>”
有什么建议或想法来解决这个问题,并在我的应用程序中应用此功能?非常感谢

jjjwad0x

jjjwad0x1#

if dif_day_dates > 0:正确。问题是:

update_data = yf.download(symbol, start=datetime.today() - last_date_df,
end=datetime.today(), interval=timeframes_codedata['daily'])

让我们来看看:

start = datetime.today() - last_date_df
print(start)
print(type(start))
'''
(datetime.timedelta(days=6, seconds=54260, microseconds=767898),)
<class 'tuple'>
'''

根据documentationstart参数接受一个字符串表达式,并且必须是(YYYY-MM-DD)

def download(tickers, start=None, end=None, actions=False, threads=True, ignore_tz=None,
             group_by='column', auto_adjust=False, back_adjust=False, repair=False, keepna=False,
             progress=True, period="max", show_errors=None, interval="1d", prepost=False,
             proxy=None, rounding=False, timeout=10, session=None):
    """Download yahoo tickers
    :Parameters:
        tickers : str, list
            List of tickers to download
        period : str
            Valid periods: 1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max
            Either Use period parameter or use start and end
        interval : str
            Valid intervals: 1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo
            Intraday data cannot extend last 60 days
        start: str
            Download start date string (YYYY-MM-DD) or _datetime, inclusive.
            Default is 99 years ago
            E.g. for start="2020-01-01", the first data point will be on "2020-01-01"
        end: str
            Download end date string (YYYY-MM-DD) or _datetime, exclusive.
            Default is now
            E.g. for end="2023-01-01", the last data point will be on "2022-12-31"

要避免这种情况:

from datetime import timedelta
start = (last_date_df +  timedelta(days=1)).strftime('%Y-%m-%d')
end = datetime.now().strftime('%Y-%m-%d')

现在,您可以在**yf.dowloand()**函数中使用这两个值。

相关问题