字符串到日期时间的转换 - 指定在日期和月份日期的年份

问题描述:

我是R用户,试图学习Python。字符串到日期时间的转换 - 指定在日期和月份日期的年份

我正在Python中的数据框中有一个dtype对象的日期列。

df['Date'] 
    0   1-Mar 
    1   1-Mar 
    2   1-Mar 
    3   1-Mar 
    4   1-Mar 
    5   1-Mar 

我想这个对象转换为日期时间使用此:

pd.to_datetime(df['Date'], format = "%d-%b") 

结果我的样子:

0  1900-03-01 
1  1900-03-01 
2  1900-03-01 
3  1900-03-01 
4  1900-03-01 
5  1900-03-01 

这对我来说有点陌生,因为当我R使用:

as.Date(df$Date, format = "%d-%b") 

我得到了我期望:

[1] "2016-03-01" "2016-03-01" "2016-03-01" "2016-03-01" 
[5] "2016-03-01" "2016-03-01" 

出现了两个问题:1)为什么R假设我想当年,什么,如果我不希望当年做?

2)在Python中,使用熊猫 - 如何指定我想要的年份以及时区?

谢谢。

+1

2):'pd.to_datetime(df ['Date'] +“ - 2016”,format =“%d-%b-%Y”)'。 – Abdou

+0

1):如果日期字符串没有完全指定日期,则返回的答案可能是系统特定的。最常见的行为是假设失去的一年,一月或一天是当前的一个。 – Abdou

1)为什么R假设我想要今年,以及如果我不想要今年?

R是假设,因为你有种要求它假设。问题是:当您提供R没有一年的1-Mar时,返回的答案可能是系统特定的。最常见的行为是假设失去的一年,一月或一天是当前的一个。因此,一旦转换完成,您将获得当年的收入。如果仅仅是因为你不想要今年,你可以通过指定年来告诉R.

2)在Python中,使用熊猫 - 如何指定我想要的年份以及时区?

同样,当你没有为它们提供一个有意义的字符串格式时,你真的不能指望Python或R返回一些有意义的日期给你。通过给pandas提供一个缺失年份的日期字符串,您将让图书馆的开发人员猜测年份应该是多少。在这两种情况下,你可以强制今年通过执行以下是2016

熊猫

df1 = pd.DataFrame(data = {'Date':['1-Mar']*6}) 
df1['Date'] = pd.to_datetime(df1['Date']+"-2016",format="%d-%b-%Y") 

产量:

0 2016-03-01 
1 2016-03-01 
2 2016-03-01 
3 2016-03-01 
4 2016-03-01 
5 2016-03-01 

[R

df1 <- data.frame(Date = rep('1-Mar',6)) 
as.Date(paste(df1$Date,"2016",sep = "-"), format = "%d-%b-%Y") 

产量:

"2016-03-01" "2016-03-01" "2016-03-01" "2016-03-01" "2016-03-01" "2016-03-01" 

您可以在今年任何你喜欢的,但你不能指望在语言或库,为您提供您愿意的话结果。有时候会有一些主观性进入设计语言或图书馆。底线是:确保你没问题,如果你的开始日期字符串不完整,仍然可以使用你提供的任何东西。

我希望这会有所帮助。

我不能帮你(1),但(2):

import pytz 
pd.to_datetime(df['Date'], format = "%d-%b").replace(year=2016, tzinfo=pytz.utc) 

在Python中,如果你没有在指定的日期时间一年,蟒蛇将其设置为0,你会得到1900年,因为datetimeyear组件是自1900年以来的年数)。