Pandas的to_datetime方法未能按照期望的格式格式化日期时间值 (dd/mm/YYYY HH:MM:SS AM/PM)。

9

我有以下格式的日期时间值

    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个回答

13

给定一个字符串列,使用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 而不是时间对象。 - Jitendra Aswani
1
@MaxU 你是对的... 那样做会更好... 不幸的是,在回答时并不知道这个 Excel 业务(问题中没有提到)。 - cs95
{btsdaf} - MaxU - stand with Ukraine
1
{btsdaf} - cs95
1
@JitendraAswani,请考虑接受一个答案,因为它回答了你最初的问题。 - MaxU - stand with Ukraine
显示剩余7条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接