Ошибка преобразования номера месяца в объект datetime - PullRequest
0 голосов
/ 04 мая 2018

Попытка преобразовать столбец в кадре данных за месяцы 1-420 (35 лет месячных данных с 1985 по 2010) в объект datetime.

Пример кадра данных:

import pandas as pd
import numpy as np
dates = pd.Series(range(1,421))
df2 = pd.DataFrame(np.random.randn(420,4),index=dates,columns=list('ABCD'))

Преобразование индекса в объект даты и времени:

df2.index = pd.to_datetime(df2.index,unit='M', origin='1981-01-01')

выдает ошибку:

ValueError: cannot cast unit M

Я не знаю, почему он не разыгрывает юнит М, так как, когда я пытаюсь использовать «d» вместо «М», он работает и растет ежедневно - почему он не повышается ежемесячно? Я получил единицы от здесь .

с использованием вывода 'm' выглядит так:

                       A           B            C            D
1981-01-01 00:01:00 0.672397    0.753926    0.865845    0.711594
1981-01-01 00:02:00 0.786754    0.658421    -0.111609   -1.459447
1981-01-01 00:03:00 0.200273    -1.485525   -1.939203   0.921833
1981-01-01 00:04:00 -1.589668   0.109760    -1.349790   -1.951316
1981-01-01 00:05:00 0.133847    -0.359300   -1.246740   -0.835645
1981-01-01 00:06:00 -0.843962   1.222129    -0.121450   -1.223132
1981-01-01 00:07:00 -0.818932   0.731127    0.984731    -1.028384

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

                            A           B            C           D
    1981-01-01 00:00:00 0.672397    0.753926    0.865845    0.711594
    1981-02-01 00:00:00 0.786754    0.658421    -0.111609   -1.459447
    1981-03-01 00:00:00 0.200273    -1.485525   -1.939203   0.921833

1 Ответ

0 голосов
/ 04 мая 2018

Вы должны использовать date_range :

df2.index = pd.date_range('1981/1/1', periods=len(df2), freq='MS')

Выход:

                A           B           C            D
1981-01-01  -0.761933   0.726808    0.589712    -1.170934
1981-02-01  0.030521    -0.892427   -1.366809   -1.515724
1981-03-01  -0.282887   1.068047    0.244493    -0.247356

Посмотрите на псевдоним смещения для получения дополнительной информации.

РЕДАКТИРОВАТЬ: Как сказал OP, 425 дней повторяются более 200 000 строк. Ниже код предоставит повторяющиеся индексы.

daterange = pd.date_range('1981/1/1', periods=420, freq='MS') 

Затем разверните его, чтобы он соответствовал вашему фрейму данных, повторив его.

df2.index = list(daterange) * math.floor(len(df2)/len(list(daterange))) + list(daterange)[0:math.floor(len(df2)%len(list(daterange)))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...