尝试在 Python 中使用 strftime 转换 datetime.datetime 对象时出现 KeyValue



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

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

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)

以前有人见过/解决这个问题吗?

采取另一种更熊猫的方法

假设源数据帧为:

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

其中Dat列保留为字符串分数保留为int64(可能是 从 Excel 或 CSV 文件中读取(。

Dat列从字符串转换为日期时间,而不是导入datetime和你的循环,只需执行一个语句:

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

当您打印(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]及其打印格式 与日期时间类型一样。

然后,不是将其重新格式化为文本,而是将其转换为具有月频率的周期,同样使用一条指令:

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

结果是:

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

数据类型句点[M]。

最新更新