Перевести григорианские даты в юлианские

У меня df вот так:

ImageDate   Year   Month   Day
20020506    2002   05      06
20030605    2003   06      05
20040201    2002   02      01

и я хочу добавить новый столбец, который преобразует даты в юлианские даты. Я уверен, что мне нужен модуль datetime чтобы сделать это, но я просмотрел документы и не нашел ничего очевидного для меня, как это сделать.

2 ответа

Посмотрите на эту библиотеку: https://pypi.python.org/pypi/jdcal

И сделать что-то вроде: `

из jdcal import gcal2jd, jd2gcal

gcal2jd (2000,1,1)"

Первое решение

Ниже приведена моя реализация Python исходного алгоритма преобразования, опубликованная здесь:

def gregorian_to_julian(year, month, day):
    i = int((month - 14) / 12)
    jd = day - 32075
    jd += int((1461 * (year + 4800 + i)) / 4)
    jd += int((367 * (month - 2 - (12 * i))) / 12)
    jd -= int((3 * int((year + 4900 + i) / 100)) / 4)
    return jd

Например:

>>> gregorian_to_julian(1970, 1, 1)
2440588

Второе решение

в качестве альтернативы, вы можете использовать встроенный объект даты, чтобы получить юлианскую дату от григорианской даты, добавив юлианскую дату григорианской абсолютной даты 0, которая равна 1 721 425 к порядковой дате, как опубликовано здесь:

>>> from datetime import date
>>> date(1970, 1, 1).toordinal() + 1721425
2440588

Второе решение проще и намного быстрее.

#Import python datetime library.
import datetime as dt
#Lets consider you want to convert the below date. You can have the  date in any order like CCYY-MM-YY or MM-DD-CCYY or with different separator like CCYY/MM/YY.
GregDate = '2020-03-30'
# Specify the date and format within strptime in this case format is %Y-%m-%d (if your data was 2020/03/30' then use %Y/%m/%d) and specify the format you want to convert into in strftime, in this case it is %Y%j. This gives out Julian date in the form CCYYDDD, if you need only in YYDDD give the format as %y%j
Juldate = dt.datetime.strptime(GregDate, "%Y-%m-%d").strftime('%Y%j')
# Print your variable to display the result
print(Juldate)
2020090
Другие вопросы по тегам