我是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中,使用Pandas - 如何指定我想要的年份以及时区?
感谢。
答案 0 :(得分:2)
1)为什么R假设我想要当年,如果我不想要当年,该怎么办?
R假设是因为你有点要求它假设。问题是:当你为R提供1-Mar
而没有一年时,返回的答案可能是系统特定的。最常见的行为是假设缺少的年,月或日是当前的。因此,一旦转换完成,您将获得当前年份。如果碰巧你不想要当年,你可以通过指定年份告诉R。
2)在Python中,使用Pandas - 如何指定我想要的年份以及时区?
同样,当你没有为他们提供有意义的字符串格式时,你真的不能指望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 :(得分:0)
我无法帮助你(1)但是(2):
import pytz
pd.to_datetime(df['Date'], format = "%d-%b").replace(year=2016, tzinfo=pytz.utc)
在python中,如果你没有在datetime中指定一年,python将它设置为0而你得到1900,因为year
的{{1}}分量是自1900年以来的年数) 。