Ошибка при чтении биржевых данных: объект «DatetimeProperties» не имеет атрибута «weekday_name», а объект «NoneType» не имеет атрибута «to_csv».

Я попытался запустить код для получения данных о запасах, но он не работает, показывая следующую ошибку:

Объект "DatetimeProperties" не имеет атрибута "dayday_name"
Объект "NoneType" не имеет атрибута "to_csv"

from pandas_datareader import data as web
import os
import pandas as pd
from pandas.testing import assert_frame_equal
def get_stock(ticker, start_date, end_date, s_window, l_window):
    try:
        df = web.get_data_yahoo(ticker, start=start_date, end=end_date)
        df['Return'] = df['Adj Close'].pct_change()
        df['Return'].fillna(0, inplace = True)
        df['Date'] = df.index
        df['Date'] = pd.to_datetime(df['Date'])
        df['Month'] = df['Date'].dt.month
        df['Year'] = df['Date'].dt.year 
        df['Day'] = df['Date'].dt.day
        for col in ['Open', 'High', 'Low', 'Close', 'Adj Close']:
            df[col] = df[col].round(2)
        df['Weekday'] = df['Date'].dt.weekday_name  
        df['Week_Number'] = df['Date'].dt.strftime('%U')
        df['Year_Week'] = df['Date'].dt.strftime('%Y-%U')
        df['Short_MA'] = df['Adj Close'].rolling(window=s_window, min_periods=1).mean()
        df['Long_MA'] = df['Adj Close'].rolling(window=l_window, min_periods=1).mean()        
        col_list = ['Date', 'Year', 'Month', 'Day', 'Weekday', 
                    'Week_Number', 'Year_Week', 'Open', 
                    'High', 'Low', 'Close', 'Volume', 'Adj Close',
                    'Return', 'Short_MA', 'Long_MA']
        num_lines = len(df)
        df = df[col_list]
        print('read ', num_lines, ' lines of data for ticker: ' , ticker)
        return df
    except Exception as error:
        print(error)
        return None
try:
    ticker='MSFT'
    input_dir = r'/Users/sirishpulijala/Desktop'
    output_file = os.path.join(input_dir, ticker + '.csv')
    df = get_stock(ticker, start_date='2014-01-01', end_date='2019-12-31', 
               s_window=14, l_window=50)
    df.to_csv(output_file, index=False)
    print('wrote ' + str(len(df)) + ' lines to file: ' + output_file)
except Exception as e:
    print(e)
    print('failed to get Yahoo stock data for ticker: ', ticker)

person sirishp    schedule 13.02.2020    source источник


Ответы (2)


Ваша проблема заключается в следующей строке:

df['Weekday'] = df['Date'].dt.weekday_name

Измените его на:

df['Weekday'] = df['Date'].dt.day_name()

и ты можешь идти.

person Sergey Bushmanov    schedule 13.02.2020
comment
@sirishp Если этот ответ помог решить вашу проблему, вы можете подумать о том, чтобы принять его. - person Sergey Bushmanov; 20.07.2020

Мы можем использовать df['Weekday'] = df['Date'].dt.strftime("%A")
Это даст названия дням недели

Дополнительные параметры форматирования включают:

%A -Полное название дня недели, например ПОНЕДЕЛЬНИК, ВТОРНИК и т. д.
%w -День недели в виде десятичного числа, например 1,2,3 и т. д.
%a -Сокращенное название дня недели, например, ВС, ПН и т. д.
%Y -год< br /> %m -месяц
%d -день
%H -часы
%M -минуты
%S -секунды

person user8604497    schedule 10.08.2020
comment
Пожалуйста, улучшите форматирование и грамматику. Этот ответ очень тяжело читать. - person Calculuswhiz; 10.08.2020