python метка времени преобразована в datetime без указания года - PullRequest
0 голосов
/ 07 мая 2020

У меня есть файл csv с данными временных рядов за годы, где отметка времени выглядит как вставка кода ниже. Одна вещь, которую следует упомянуть о данных, это 30-летние усредненные почасовые данные о погоде, поэтому год не указан с меткой времени.

Date
01-01T01:00:00
01-01T02:00:00
01-01T03:00:00
01-01T04:00:00
01-01T05:00:00
01-01T06:00:00
01-01T07:00:00
01-01T08:00:00
01-01T09:00:00
01-01T10:00:00
01-01T11:00:00
01-01T12:00:00
01-01T13:00:00
01-01T14:00:00
01-01T15:00:00
01-01T16:00:00
01-01T17:00:00
01-01T18:00:00
01-01T19:00:00
01-01T20:00:00
01-01T21:00:00
01-01T22:00:00
01-01T23:00:00

Я могу прочитать файл csv просто отлично :

df = pd.read_csv('weather_cleaned.csv', index_col='Date', parse_dates=True)

Если я сделаю pd.to_datetime(df), это приведет к ошибке: ValueError: to assemble mappings requires at least that [year, month, day] be specified: [day,month,year] is missing

Может кто-нибудь посоветует преобразовать мой df в datetime?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Вы можете передать date_parser аргумент ( проверить документы ), например

import pandas as pd
from datetime import datetime

df = pd.read_csv('weather_cleaned.csv', index_col='Date', parse_dates=['Date'], 
                  date_parser=lambda x: datetime.strptime(x, '%d-%mT%H:%M:%S'))
print(df.head())

output

Empty DataFrame
Columns: []
Index: [1900-01-01 01:00:00, 1900-01-01 02:00:00, 1900-01-01 03:00:00, 1900-01-01 04:00:00, 1900-01-01 05:00:00]

, конечно, вы можете определить другую функцию, возможно укажите другой год, et c .. например, если вы хотите год 2020 вместо 1900, используйте

date_parser=lambda x: datetime.strptime(x, '%d-%mT%H:%M:%S').replace(year=2020)

Примечание Я предполагаю, что это формат день-месяц, измените строку формата соответственно .

РЕДАКТИРОВАТЬ: Измените мой пример, чтобы отразить, что столбец Date должен использоваться как индекс.

0 голосов
/ 07 мая 2020

Вы можете добавить год по умолчанию:

 pd.to_datetime('2020-' + df['Date'])
...