Как определить индекс даты-времени для длинной базы данных в Pandas Python - PullRequest
0 голосов
/ 08 апреля 2020

Я пытаюсь установить datimeindex с ежемесячными данными с 1 года нашей эры, в то время как я не нахожу такую ​​же проблему с теми же данными с более коротким промежутком времени, скажем, с 1950 по 2020 год

Это код работает

co2data_monthly = pd.read_excel(path to my data)
co2data_monthly = co2data_monthly[co2data_monthly['year']>=1950]
dtindex = np.arange('1950-01-01', '2020-04-01', dtype='datetime64[M]')
co2data_monthly = co2data_monthly.set_index(dtindex)

Этот код не работает

co2data_monthly = pd.read_excel(path to my data)
co2data_monthly = co2data_monthly[co2data_monthly['year']>=1950]
dtindex = np.arange('0001-01-01', '2020-04-01', dtype='datetime64[M]')
co2data_monthly = co2data_monthly.set_index(dtindex)

Поэтому, когда я пытаюсь определить 1 января 1 года нашей эры, я получаю следующее сообщение об ошибке Out of bounds nanosecond timestamp: 1-01-01 00:00:00

Что я хочу ...

Мой окончательный вывод должен быть моей базой данных с месячным индексом даты и времени с 1 по 2020 год

1 Ответ

0 голосов
/ 09 апреля 2020

A pandas datetime хранится как положительное целое число единиц времени (по умолчанию наносекунды), начиная с конкретной даты origin (по умолчанию: Unix epoch, ie 01.01.1970).

Поскольку 01.01.0001 намного раньше Unix эпохи, вы получаете эту ошибку. Вместо этого укажите эпоху юлианского календаря (1 января, 4713 B C) и используйте D = Daily в качестве единицы измерения.

Вы можете пропустить arange при создании индекса, и просто используйте pandas .to_datetime () вместо. Что-то вроде приведенного ниже кода, который предполагает, что ваши даты находятся в «столбце года» (может быть неверно). Вам также может понадобиться указать формат даты явно, используя format.

...
co2data_monthly['time'] = pandas.to_datetime(co2data_monthly['year'], unit='D', origin='julian')
co2data_monthly = co2data_monthly.set_index('time')
...