2017-07-14 98 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'的答案是一個更好的答案,應該被接受;) –