python时间戳在不指定年份的情况下转换为datetime



我有一个包含一年时间序列数据的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吗?

您可以传递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())

输出

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]

当然,你可以定义不同的功能,也许可以指定不同的年份,等等。。例如,如果您想要2020年而不是1900年,请使用

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

注意我假设它是日-月格式,相应地更改格式字符串

编辑:更改我的示例以反映日期列应用作索引。

您可以做的一件事是附加一个默认年份:

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

最新更新