看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
(编码题)订单表里的时间字符串精确到秒,需分别降精度为“小时”和“天”以便粗粒度汇总。
源数据如下:
import pandas as pd
df = pd.DataFrame({'ts_str':['2023-07-15 14:38:52',
'2023-07-15 23:59:59']})
print(df)
print()
print(df.dtypes)
输出:
ts_str
0 2023-07-15 14:38:52
1 2023-07-15 23:59:59
ts_str object
dtype: object
要求:
astype()
将 ts_str
列转换成 datetime64[ns] 后,再分别得到“截断到小时”和“截断到日期”的 datetime64[ns] 结果。ts_hour
、ts_day
并打印结果及其 dtypes,确认秒级部分已被清零。期望最终输出:
ts_str ts_hour ts_day
0 2023-07-15 14:38:52 2023-07-15 14:00:00 2023-07-15
1 2023-07-15 23:59:59 2023-07-15 23:00:00 2023-07-15
ts_str object
ts_hour datetime64[ns]
ts_day datetime64[ns]
dtype: object
代码如下:
import pandas as pd
df = pd.DataFrame({'ts_str':['2023-07-15 14:38:52',
'2023-07-15 23:59:59']})
# 先统一转 ns 精度
dt = df['ts_str'].astype('datetime64[ns]')
# 利用 floor 截断
df['ts_hour'] = dt.dt.floor('h')
df['ts_day'] = dt.dt.floor('d')
print(df)
print()
print(df.dtypes)
输出:
ts_str ts_hour ts_day
0 2023-07-15 14:38:52 2023-07-15 14:00:00 2023-07-15
1 2023-07-15 23:59:59 2023-07-15 23:00:00 2023-07-15
ts_str object
ts_hour datetime64[ns]
ts_day datetime64[ns]
dtype: object
pandas 的 astype()
只接受 [ns, us, ms, s]
四种固定频率,不支持 h
或 D
精度;因此先统一转成 datetime64[ns]
,再用 .dt.floor('h')
和 .dt.floor('d')
截断到小时/日期,既满足精度要求又保持类型一致。
更新时间:2025-09-14 11:05:21 标签:pandas python 时间类型 时间精度