如何更改数据帧中不同日期的日期时间格式

时间:2019-05-10 08:57:10

标签: python pandas strftime

这个问题与线程有关 How to change the datetime format in pandas

那里提出的解决方案可以在一天内很好地工作,但是如果您在同一数据框中有不同的日期怎么办?

例如,我在datetime中的日期是

2016-01-26
2016-01-27
2016-01-28
2016-01-29

与两次使用同一日期的线程相同的代码:

import pandas as pd

df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '26/1/2016'}})
print (df)
         DOB
0  26/1/2016 
1  26/1/2016

df['DOB'] = pd.to_datetime(df.DOB)
print (df)
         DOB
0 2016-01-26
1 2016-01-26

df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')
print (df)
         DOB        DOB1
0 2016-01-26  01/26/2016
1 2016-01-26  01/26/2016

我也在datetime to string with series in python pandas

上找到了此代码
df['DOB1'] = df['DOB'].apply(lambda x:x.strftime('%m/%d/%Y'))

还有一个:

df['DOB1'] = df['DOB'].map(lambda x:x.strftime('%m/%d/%Y'))

例如,在我的数据框DOB中,我有以下日期,并且希望它们采用其他格式。

我的日期格式为日期时间:

0  2016-01-26
1  2016-01-27
2  2016-01-28  
3  2016-01-29  

所需的输出:

01/26/2016
01/27/2016
01/28/2016
01/29/2016

我一直在使用与上面相同的代码,但是当我运行它们时(无论使用哪种代码),所有日期都会变成

01/26/2016
01/26/2016
01/26/2016
01/26/2016

似乎pandas取了第一个值并将其应用于数据帧的其余部分。如何让熊猫读取和转换日期不同?

谢谢!

2 个答案:

答案 0 :(得分:0)

我运行您的代码,结果与您预期的一样。

import pandas as pd
df = pd.DataFrame({'DOB': {0: '26/1/2016', 1: '27/1/2016', 2: '28/1/2016'}})
df['DOB'] = pd.to_datetime(df.DOB)
df['DOB1'] = df['DOB'].dt.strftime('%m/%d/%Y')

结果:

         DOB        DOB1
0 2016-01-26  01/26/2016
1 2016-01-27  01/27/2016
2 2016-01-28  01/28/2016

在不了解更多详细信息的情况下,建议您创建一个函数并将其应用于您的列。

convert_date = lambda i: i.strftime('%m/%d/%Y')
df['DOB'].apply(convert_date)

0    01/26/2016
1    01/27/2016
2    01/28/2016

答案 1 :(得分:0)

感谢您对此进行调查。我发现了自己的错误,这有点令人尴尬,但我的确想在此留下问题-还要向其他初学者展示可以在不首先发现错误的情况下出错的地方。我还要感谢提供答复的善良人员。

确实,我确实确实使用了上面的代码作为示例。但是在我的代码中,我忘了在strftime中包含%d。所以,当然,像这样的日期

2016-01-26
2016-01-27
2016-01-28
2016-01-29

将被转换为

2016\01
2016\01
2016\01
2016\01

但是,只有当N. Arunoprayoch回答时,我才看到它!!!我想知道我怎么能错过那个?

很抱歉,再次感谢您的帮助!