在朱利安日期python中创建日期范围

时间:2018-05-02 15:20:13

标签: python pandas astropy

我必须在两个日期之间创建一个范围,在几分钟的日期之间的间隔,在Julian日期,我创建一个代码,但是花了很多时间(15分钟,前者)

我的代码是:

from astropy.time import Time
import pandas as pd    
timedelta = "600s"
start = "2018-01-01" 
end = "2018-06-30"
dateslist = pd.date_range(start,end, freq =timedelta  ).tolist()
dates =  pd.DataFrame({'col':dateslist})
dates["col2"] =""
for i in range(len(dateslist)):
    #print(i," / ", len(dateslist))
    dates["col2"][i] = (Time(str(dateslist[i]).replace(" ", "T"), format="fits").jd)

我尝试使用Time for for,但是收到错误

time = str(list(dates['col'])).replace("[Timestamp('","").replace(" Timestamp('","").replace("')","").replace(" ","T").split(",")
time
Time(time, format="fits")
  

ValueError:输入值与格式类匹配

不匹配

有没有办法快速做到这一点?

现在谢谢,

2 个答案:

答案 0 :(得分:4)

使用DatetimeIndex.to_julian_date

dates["col2"] = pd.date_range(start,end, freq = timedelta).to_julian_date()

答案 1 :(得分:0)

天蝎的等效方式是:

from astropy.time import Time
import astropy.units as u
timedelta = 600 * u.s
start = "2018-01-01" 
end = "2018-06-30"
dates["col2"] = np.arange(Time(start).jd, Time(end).jd, timedelta.to_value('day'))

另一种(可能更常用的玄武方式)是:

start = Time("2018-01-01")
end = Time("2018-06-30")
timedelta = 600 * u.s
dates = start + timedelta * np.arange((end - start) / timedelta)

这会为您提供一个向量Time对象,您可以通过jd属性将其转换为JD。