Pandas 1.5.2中astype('datetime64[m]')转换时间戳至分钟级失效问题
解决Pandas 1.5.2中时间戳转分钟精度格式的问题
问题原因
你之前用df['Timestamp'].astype('datetime64[m]')能生效,大概率是因为当时Timestamp列是字符串类型,astype会先将字符串解析为datetime64[m]类型,且Pandas默认显示该精度格式;但现在列可能已转为datetime64[ns]类型,仅修改精度不会改变显示逻辑,仍会保留毫秒信息。
可行解决方案
方案1:截断到分钟+格式化输出(推荐,直接得到目标字符串格式)
先将时间戳截断到分钟精度,再格式化为你需要的字符串格式:
import pandas as pd # 确保列是datetime类型(如果当前是字符串,先执行这一步) df['Timestamp'] = pd.to_datetime(df['Timestamp']) # 截断到分钟并格式化 df['Timestamp_min'] = df['Timestamp'].dt.floor('min').dt.strftime('%Y-%m-%d %H:%M')
执行后Timestamp_min列的结果完全符合你的预期格式。
方案2:修改数据精度+调整显示选项(保留datetime类型)
如果需要保留datetime类型而非字符串,可以先修改精度,再设置全局显示选项隐藏秒级信息:
# 转换为分钟精度的datetime类型 df['Timestamp'] = df['Timestamp'].astype('datetime64[m]') # 设置全局datetime显示格式,仅显示到分钟 pd.options.display.date_format = '%Y-%m-%d %H:%M'
注意:该设置是全局生效的,会影响所有datetime列的显示样式。
测试验证
用你的样本数据测试方案1,最终输出结果如下:
0 2017-07-11 09:33 1 2017-07-11 09:33 2 2017-07-11 09:33 3 2017-07-11 09:33 4 2017-07-11 09:33 5 2017-07-11 16:20 6 2017-07-11 16:20 7 2017-07-11 16:20 8 2017-07-11 16:20 9 2017-07-11 16:20
内容的提问来源于stack exchange,提问作者user1769197
相关产品推荐
相关产品推荐

