Почему первая строка моего индекса кадра данных pandas является именем столбца индекса? - PullRequest
0 голосов
/ 12 июля 2020

Я создаю пустой pandas фрейм данных как таковой:

self.tracker = pd.DataFrame(columns = ['Portfolio Value', 'In Position','Capital',
                                       'Asset Quantity','Total Fees Paid'], 
                            index = ['Date'])

Я хочу вставить новые строки в фрейм данных в for-l oop. Теперь я знаю, что использование .concat() - самый эффективный способ сделать это. Но все примеры показывают, что это нереальный c и довольно бессмысленный подход использования понимания списка с помощью метода .concat().

Мой индекс - это индекс объекта datetime. Причина, по которой я не создаю диапазон дат и не устанавливаю его в качестве индекса, заключается в том, что в течение l oop выполняется итерация данных временных рядов с пропущенными датами. Я вставляю новые строки в фрейм данных следующим образом:

for (index1, row1), (index2, row2) in zip(self.ohlcv.iterrows(), self.features.iterrows()):
    self.tracker.loc[index1] = [self.asset_quantity * row1['Open'],
                                            self.in_position, self.capital,
                                            self.asset_quantity,
                                            self.cumulative_fees_paid]

Однако, когда я исследую этот фрейм данных, с tracker.index я получаю следующее:

Index([             'Date', 2016-06-06 00:00:00, 2016-06-07 00:00:00,
       2016-06-08 00:00:00, 2016-06-09 00:00:00, 2016-06-10 00:00:00,
       2016-06-11 00:00:00, 2016-06-12 00:00:00, 2016-06-13 00:00:00,
       2016-06-14 00:00:00,
       ...
       2017-01-06 00:00:00, 2017-01-07 00:00:00, 2017-01-08 00:00:00,
       2017-01-09 00:00:00, 2017-01-10 00:00:00, 2017-01-11 00:00:00,
       2017-01-12 00:00:00, 2017-01-13 00:00:00, 2017-01-14 00:00:00,
       2020-04-05 00:00:00],
      dtype='object', length=225

Итак, почему является ли первая строка моего индекса именем фактического столбца индекса?

Ответы [ 2 ]

0 голосов
/ 12 июля 2020

Просто инициализация пустого фрейма данных на основе вашего кода

tracker = pd.DataFrame(columns = ['Portfolio Value', 'In Position','Capital',
                                       'Asset Quantity','Total Fees Paid'], 
                            index = ['Date'])

Когда я запрашиваю трекер в консоли python, он возвращает;

Portfolio Value In Position Capital Asset Quantity  Total Fees Paid
Date        NaN         NaN           NaN      NaN              NaN

Чтобы исправить это, вам необходимо укажите, что Date - это имя индекса. Пример

import pandas as pd
import datetime
my_date = datetime.datetime.now().date()

index = pd.date_range(my_date-datetime.timedelta(10), periods=10, freq='D')

tracker = pd.DataFrame(columns = ['Portfolio Value', 'In Position','Capital',
                                           'Asset Quantity','Total Fees Paid'],
                                index = index)
tracker.index.name='Date'

  • Когда вы запрашиваете свой фрейм данных, т.е. запускаете tracker, вы получаете;
    Portfolio Value In Position Capital Asset Quantity  Total Fees Paid
    Date                    
    2020-07-02  NaN     NaN     NaN     NaN     NaN
    2020-07-03  NaN     NaN     NaN     NaN     NaN
    2020-07-04  NaN     NaN     NaN     NaN     NaN
    2020-07-05  NaN     NaN     NaN     NaN     NaN
    2020-07-06  NaN     NaN     NaN     NaN     NaN
    2020-07-07  NaN     NaN     NaN     NaN     NaN
    2020-07-08  NaN     NaN     NaN     NaN     NaN
    2020-07-09  NaN     NaN     NaN     NaN     NaN
    2020-07-10  NaN     NaN     NaN     NaN     NaN
    2020-07-11  NaN     NaN     NaN     NaN     NaN
  • Когда вы запрашиваете свой индекс , т.е. tracker.index вы получите;
DatetimeIndex(['2020-07-02', '2020-07-03', '2020-07-04', '2020-07-05',
                   '2020-07-06', '2020-07-07', '2020-07-08', '2020-07-09',
                   '2020-07-10', '2020-07-11'],
                  dtype='datetime64[ns]', name='Date', freq='D')
0 голосов
/ 12 июля 2020

Вы всегда можете сделать свой столбец даты не индексом при инициализации, а затем, когда ваш l oop будет завершен, установить его как индекс? Таким образом, ваши данные выровняются :)

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