Расширьте панды DataFrame DatetimeIndex на 25 дней недели - PullRequest
0 голосов
/ 29 января 2019

Я пытался расширить свой индекс дат PFD на 25 рабочих дней.Следующий тестовый пример, который я написал, демонстрирует проблему.Будущие дни генерируются правильно, однако они не добавляются в DataFrame.

import pandas as pd
from business_calendar import Calendar

dates = pd.date_range('20190121', periods=5)
df = pd.DataFrame({'high': (58.22, 57.93, 57.51, 57.89, 58.77), 'low': (57.65, 57.15, 56.98, 57.12, 58.00)}, index=dates)

cal = Calendar()
last_idx = df.index[-1].date()
for i in range(1, 26):
    weekdays = pd.DatetimeIndex([cal.addbusdays(last_idx, i)])
    print("idx_count: {:2d} idx: {}".format(i, weekdays))
    df.index.append(weekdays)
print(df.index)

Код завершается с уровнем ошибки 0, есть идеи, почему DataFrame не обновляется должным образом?

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Внесены некоторые изменения в код (пояснения в комментариях) :

import pandas as pd
from business_calendar import Calendar

dates = pd.date_range('20190121', periods=5)
df = pd.DataFrame({'high': (58.22, 57.93, 57.51, 57.89, 58.77), 'low': (57.65, 57.15, 56.98, 57.12, 58.00)}, index=dates)

cal = Calendar()
last_idx = df.index[-1].date()
idx_list=[] #added this line
for i in range(1, 26):
    weekdays = pd.DatetimeIndex([cal.addbusdays(last_idx, i)])
    #print(weekdays[0])
    idx_list.append(weekdays[0]) #appending just the value so weekdays[0]
idx_list.extend(df.index) #extend the list with index
df.reindex(idx_list).sort_index() #reindex the df and sort the index

            high    low
2019-01-21  58.22  57.65
2019-01-22  57.93  57.15
2019-01-23  57.51  56.98
2019-01-24  57.89  57.12
2019-01-25  58.77  58.00
2019-01-28    NaN    NaN
2019-01-29    NaN    NaN
2019-01-30    NaN    NaN
.......................
....................
....
0 голосов
/ 29 января 2019

Вы пытаетесь добавить строки в свой Dataframe с указанием дней недели в качестве индекса, поэтому простой способ сделать это будет

for i in range(1, 26):
   weekdays = pd.DatetimeIndex([cal.addbusdays(last_idx, i)])
   #If you want the values to be na
   newRow = pd.DataFrame(index=weekdays)
   #Or if you want to give values to the new rows
   newRow = pd.DataFrame({'high': (42), 'low': (0)}, index=weekdays)

   df = df.append(newRow)

del newRow
print(df.index)

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