尝试在 Python 中使用 strftime 转换 datetime.datetime 对象时出现键值错误

KeyValue error when trying to convert datetime.datetime object using strftime in Python

我正在尝试将一系列中的值从一种日期时间对象格式转换为另一种格式。

我使用以下方法将原始条目转换为日期时间对象:

import datetime as dt
for each in DataFrame_name['Series_name']:
    DataFrame_name['Series_name'][each] = dt.datetime.strptime(each,"%Y-%m-%d %H:%M")

这在将字符串条目(例如“2019-07-01 12:14”转换为日期时间对象方面非常有效。

但是,当我尝试将此日期时间格式转换为“%Y-%m”时,出现了 KeyError:datetime.datetime(2019, 7, 1, 12, 14)

for each in DataFrame_name['Series_name']:
    DataFrame_name['Series_name'][each].strftime('%Y-%m')
KeyError: datetime.datetime(2018, 2, 1, 0, 0)

有没有人seen/solved以前做过这个?

采用另一种更 pandasonic 的方法。

假设源DataFrame是:

                Dat  Score
0  2019-07-01 12:14    120
1  2019-07-02 10:20    130
2  2019-08-07 18:33    610

其中 Dat 列保存为 String 并且 Score 保存为 int64(因为它可能是 从 Excel 或 CSV 文件中读取)。

Dat 列从 String 转换为 datetime,而不是导入 datetime 和你的循环,只需执行一个 single 语句:

df.Dat = pd.to_datetime(df.Dat)

当你print(df)时,你会得到:

                  Dat  Score
0 2019-07-01 12:14:00    120
1 2019-07-02 10:20:00    130
2 2019-08-07 18:33:00    610

Dat 的类型现在是 datetime64[ns] 及其打印格式 与 datetime 类型一样。

然后,不要将其重新格式化为文本,而是将其转换为 Period 频率,再次使用一条指令:

df.Dat = df.Dat.dt.to_period('M')

结果是:

       Dat  Score
0  2019-07    120
1  2019-07    130
2  2019-08    610

并且Data的类型是period[M].