Pandas to_datetime 未以所需格式(dd/mm/YYYY HH:MM:SS AM/PM)格式化日期时间值
Posted
技术标签:
【中文标题】Pandas to_datetime 未以所需格式(dd/mm/YYYY HH:MM:SS AM/PM)格式化日期时间值【英文标题】:Pandas to_datetime is not formatting the datetime value in the desired format (dd/mm/YYYY HH:MM:SS AM/PM) 【发布时间】:2018-04-06 09:53:53 【问题描述】:我有以下格式的日期时间值
2017-09-11 01:18:38
2017-09-11 01:34:30
2017-09-11 05:03:57
2017-09-11 09:55:48
2017-09-11 09:59:10
2017-09-11 12:09:05
我必须以 dd/mm/YYYY HH:MM:SS AM/PM: 格式显示值:
11/09/2017 01:18:38 AM
11/09/2017 01:34:30 AM
11/09/2017 05:03:57 AM
11/09/2017 09:55:48 AM
11/09/2017 09:59:10 AM
11/09/2017 12:09:05 PM
11/09/2017 12:08:16 PM
我正在使用以下代码来执行此操作,但它不会改变格式
data_f1['Reported Date'] = pd.to_datetime(data_f1['Reported Date'],
format="%m/%d/%Y %I:%M:%S %p")
【问题讨论】:
【参考方案1】:给定一个字符串列,使用pd.to_datetime
将其转换为日期时间对象列。
给定一个已经存在的日期时间列,使用dt.strftime
将其转换为特定格式的字符串列。
这就是它的工作方式,你无法改变它。
df
date
0 2017-09-11 01:18:38
1 2017-09-11 01:34:30
2 2017-09-11 05:03:57
3 2017-09-11 09:55:48
4 2017-09-11 09:59:10
5 2017-09-11 12:09:05
df.date.dt.strftime("%m/%d/%Y %I:%M:%S %p")
0 09/11/2017 01:18:38 AM
1 09/11/2017 01:34:30 AM
2 09/11/2017 05:03:57 AM
3 09/11/2017 09:55:48 AM
4 09/11/2017 09:59:10 AM
5 09/11/2017 12:09:05 PM
Name: date, dtype: object
请注意,更改 datetime
列的表示没有用,因为它们是 datetime
对象,并且由他们的类的__repr__
方法定义自己的表示。
【讨论】:
我无法更改日期时间对象的格式,因为我需要将此值传递给 excel,它本身必须采用这种格式,但是如果我使用 strftime,它将通过值作为 excel 的字符串而不是时间对象 @JitendraAswani 当您将日期写入 excel 时,它会以字符串形式写入......请考虑一下。如果您是 pandas 的核心开发人员,您可以执行“更改日期的 repr”。否则,......你想要的是strftime
。
@MaxU 你是对的......那会更好......不幸的是在写答案时不知道这个excel业务(问题中没有提到)。
@JitendraAswani 好的。你没有在问题中提到 excel,所以我的回答没有谈到 excel。但是,如果您坚持这一点,请查看 MaxU 提供的链接,并在编写数据帧时使用pd.ExcelWriter
并传递datetime_format="%m/%d/%Y %I:%M:%S %p"
。我们通常不愿意将不相关的问题与您在 cmets 中的主要问题联系起来,但我会帮助您解决这个问题。
@JitendraAswani,请考虑 accepting 一个答案,因为它回答了您的原始问题以上是关于Pandas to_datetime 未以所需格式(dd/mm/YYYY HH:MM:SS AM/PM)格式化日期时间值的主要内容,如果未能解决你的问题,请参考以下文章
使用 pandas.to_datetime 转换时指定日期格式
为啥 pandas.to_datetime 对于非标准时间格式(例如“2014/12/31”)很慢
pandas使用to_datetime函数将unix时间戳转化为日期时间格式(Convert Unix times to DateTime)