我正在尝试将系列中的值从一种日期时间对象格式转换为另一种。
我使用了以下内容将原始条目转换为日期时间对象:
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]。