2017-07-14 67 views
-1

我在我的df中有一个日期列(对象),看起来像下面的格式。YYYY-MM-DD日期到python的Julian日

我需要转换此列或创建一个新的日期列,其中包含格式为YYDDD格式的5位朱利安日期。不知道如何在Python做到这一点/熊猫

日期:

2016-03-28   
2016-03-11   
2016-03-12   
2016-03-23   
2016-03-04   
2016-03-02   
2016-03-30   
2016-03-30   
2016-03-13   
2016-03-13 

基本上我想创建一个基于关初始DF在我的DF新列[“日期”]列其中Df [” date2']是所需的格式。

所以当日期1 =“2016年3月28日”日期2 = 16088

+1

这里有一个[问题](https://stackoverflow.com/q/36156582/ 945456)他们在哪里添加基于另一个日期/时间值的新列。它可以帮助你开始。您可以使用['.dt.dayofyear'](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.dayofyear.html#pandas.Series.dt.dayofyear )。向我们展示确切位置卡住的一些代码(例如,创建新列与处理日期)会有帮助。 –

+2

你对[Julian Date](https://en.wikipedia.org/wiki/Julian_day)的想法是非常传统的, – gboffi

+2

[从python中的字符串日期中提取年份和Julian日的可能的副本](https:/ /stackoverflow.com/questions/13943062/extract-day-of-year-and-julian-day-from-a-string-date-in-python) –

回答

2

您可以使用strftime,检查http://strftime.org/

df = pd.DataFrame({'date': pd.date_range('2016-03-28', periods=5)}) 
print (df) 
     date 
0 2016-03-28 
1 2016-03-29 
2 2016-03-30 
3 2016-03-31 
4 2016-04-01 

df['newFormat'] = df['date'].dt.strftime('%y%j') 
print (df) 
     date newFormat 
0 2016-03-28  16088 
1 2016-03-29  16089 
2 2016-03-30  16090 
3 2016-03-31  16091 
4 2016-04-01  16092 
1

我不是蟒蛇/大熊猫专家,但下面为你工作:

import pandas as pd 
df = pd.DataFrame({'date': pd.date_range('2016-03-28', periods=5)}) 
df['paddedDay'] = df['date'].dt.dayofyear.apply(lambda x: str(x).zfill(3)) 
df['lastTwoOfYear'] = df['date'].dt.year.apply(lambda x: str(x)[-2:]) 
df['newFormat'] = df['lastTwoOfYear'].map(str) + df['paddedDay'] 

这将产生以下。

 date paddedDay lastTwoOfYear newFormat 
0 2016-03-28  088   16  16088 
1 2016-03-29  089   16  16089 
2 2016-03-30  090   16  16090 
3 2016-03-31  091   16  16091 
4 2016-04-01  092   16  16092 

我会保证你有这样做的更好的方法(当然有一种方法可以避免临时列)。这是我第一次为熊猫写任何东西,所以请原谅。如果任何人想受到冷落,我会挑战他们向我们展示一个更好的解决方案;我很乐意看到正确的方式做到这一点:)

+0

感谢您的帮助。这对于了解你如何分解并将这些部分组合在一起以形成所需的格式很有用。 – nakedbird226

+0

@ nakedbird226不客气。这就是说,jezrael使用'strftime'的答案是一个更好的答案,应该被接受;) –

相关问题