как хранить различные данные о кадрах акций в каком-то контейнере и можно ли выполнить какую-то операцию за один раз для всего кадра данных в этой операции объединения - PullRequest
0 голосов
/ 09 апреля 2019

Я хотел бы знать, как хранить различные фреймы данных о запасах в каком-либо контейнере и иметь возможность запускать некоторые операции за один раз для всех фреймов данных в этой операции контейнера, а также рассчитывать ежедневные, кончажные и т. Д.

Я использовал для этого функцию vars(), но это не очень хорошая практика. Я хочу хранить данные по-другому, и понятия не имею, как это сделать.

В моем задании мне сказали, не используйте vars() используйте что-то еще

for stock in stocks:
    df = pd.read_csv(stock+'_data.csv',index_col=0)
    df.columns
    df['Daily returns'] = df['close'] /df['open'] -1
    vars()['df_'+stock] = df.copy()

    #Calculation of Loss and profit trades
    loss=np.where(vars()['df_'+stock]['Daily returns']<0)# so u see this code is first calling the data frame 'df_'+stock so a stock data is stored in it where we named each stock dataframe
    profit=np.where(vars()['df_'+stock]['Daily returns']>0)

    #Calculation of trade counts
    total_trades = len(vars()['df_' + stock]) # as we are taking a trade evry single day so we can count the lenght of dataframe 
    loss_trades = len(loss[0]) # [0] this argument is there because without this code would return zero 
    profit_trades = len(profit[0])

    #Calculation of hit ratios
    hit_ratio= profit_trades/(loss_trades + profit_trades)
    total_returns=np.cumsum(vars()['df_'+stock]['Daily returns'])    
    vars()['df_'+stock]['Cum Returns']=total_returns 

    stats=[stock,hit_ratio,total_returns[len(total_returns)-1]]
    all_stats.append(stats)
    headings=['Stock Name','Hit Ratio','Final Return']

    #Final Result of all the calculations
    final_result=pd.DataFrame(all_stats, columns=headings)

    plt.plot(vars()['df_'+stock].index.values,vars()['df_'+stock]['Cum Returns'],label=stock)
    plt.legend()

ожидаются результаты, но я не хочу использовать vars() function

1 Ответ

1 голос
/ 12 апреля 2019

Давайте поговорим о том, что вы в настоящее время делаете, в надежде, что вам станет ясно, что вам нужно изменить. Таким образом, вы в настоящее время храните в Vars и должны изменить это. Вопрос 1: что такое vars()

vars ([объект]) Возвращает атрибут dict для модуля, класса, экземпляр или любой другой объект с атрибутом dict .

Объекты, такие как модули и экземпляры, имеют обновляемый dict атрибутов; однако другие объекты могут иметь ограничения записи на свои dict атрибуты (например, классы используют types.MappingProxyType для предотвращения прямого обновления словаря).

Без аргумента vars () действует как localals (). Обратите внимание, местные жители словарь полезен только для чтения, так как обновления для местных жителей словарь игнорируется.

Последняя часть очень важна, см. Этот раздел из документа locals()

Примечание. Содержимое этого словаря не должно изменяться; изменения может не влиять на значения локальных и свободных переменных, используемых интерпретатор.

Таким образом, вы в настоящее время используете словарь местных жителей, который не следует изменять, поскольку эти изменения могут потерпеть неудачу. Все, что вам нужно сделать, это использовать другой словарь.

P.S. Ваш код неверен. Это не вычисляет правильный ответ.

Редактировать: Например, создать новый словарь stocks = {} вне цикла и заменить экземпляр vars() на stocks

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...