Дата Python - итерационные имена столбцов - PullRequest
1 голос
/ 17 октября 2019

Я создаю имена столбцов в виде строк. Имена представляют годы и месяцы, начиная с даты начала моих данных (набор данных по сути представляет собой матрицу с датами в качестве индекса и строками «даты» в качестве имен столбцов)

Однако мой код неверен:

    #date range index
    output_frame_index = pd.date_range(min_date,periods = (months_of_data + future_prtiods), freq = 'M' ) 

    #column names
    cols = []
    for i in range(months_of_data+1):
        year = min_date.year + math.floor(i/12)
        month = ( min_date.month + i)  % 12
        if not month: month = 12
        col_label = str(year) + ' ' + str(month)
        cols.append(col_label)

    # create empty output frame   
    output_frame = pd.DataFrame(index = output_frame_index, columns = cols)

    return output_frame

Вышеприведенное правильно начинается с «2011 3» в качестве первого столбца, но после «2011 12» перебирает «2011 1», «2011 2», 2012 3 ».

Заранее спасибо.

[править]

Закончено выполнение:

        cols = [x.date().strftime('%Y_%m') for x in pd.date_range(min_date,periods=months_of_data,freq='M')]

Основано на потрясающем ответе ниже. Спасибо.

1 Ответ

1 голос
/ 17 октября 2019
months_of_data = 24
min_date = '2018-01-01'

cols = (pd.date_range(min_date, periods=months_of_data, freq='M')
        .strftime('%Y %-m')  # '%Y %m' for 2018 01, 2018 02, ...
        .tolist())
>>> cols
['2018 1',
 '2018 2',
 '2018 3',
 '2018 4',
 '2018 5',
 '2018 6',
 '2018 7',
 '2018 8',
 '2018 9',
 '2018 10',
 '2018 11',
 '2018 12',
 '2019 1',
 '2019 2',
 '2019 3',
 '2019 4',
 '2019 5',
 '2019 6',
 '2019 7',
 '2019 8',
 '2019 9',
 '2019 10',
 '2019 11',
 '2019 12']
...