在 pandas dataframe 中将 Julian Date with Time 转换为 full datetime

Convert Julian Date with Time to full datetime in pandas dataframe

提问人:user1229108 提问时间:12/9/2021 最后编辑:Emmauser1229108 更新时间:11/18/2023 访问量:266

问:

我在 pandas 数据框中有一个字段,我使用 to_julian_date() 从 datetime64[ns] 字段计算儒略日期,现在在下面的示例中具有类似 jul1 的值:

df = pd.DataFrame({'dates':['2017-01-01 03:15:00','2017-01-01 03:15:00']})
df['dates'] = pd.to_datetime(df['dates'])

df['jul1'] = pd.DatetimeIndex(df['dates']).to_julian_date()
#if need remove times
df['jul2'] = pd.DatetimeIndex(df['dates']).floor('d').to_julian_date()
print (df)
                dates          jul1       jul2
0 2017-01-01 03:15:00  2.457755e+06  2457754.5

我的问题是:如何将像这样的儒略日期转换回具有时间的完整日历日期,其中包含可能的完整时间分辨率?因此,如果我已将日期时间输入到秒以生成儒略等价物,如何将儒略日期反转回完整的日期时间?

Python Pandas 数据帧 julian-date

评论


答:

1赞 LABarnard 11/16/2022 #1

当我试图自己做同样的事情时,我偶然发现了这个问题。事实证明,解决方案非常简单,但在文档中并不明显。使用上面的示例,我刚刚添加了最后一行。

df = pd.DataFrame({'dates':['2017-01-01 03:15:00','2017-01-01 03:15:00']})
df['dates'] = pd.to_datetime(df['dates'])

df['jul1'] = pd.DatetimeIndex(df['dates']).to_julian_date()
#if need remove times
df['jul2'] = pd.DatetimeIndex(df['dates']).floor('d').to_julian_date()

df['dates_recovered'] = pd.to_datetime(df['jul1'], unit='D', origin='julian')

它认为,如果有一种方法可以伴随该方法,那将是有帮助的。from_julian_dateto_julian_date

0赞 user39678 11/18/2023 #2

美国海军运营着一个用于公历日期时间<>儒略日期时间转换的网站:

https://aa.usno.navy.mil/data/api#jdconv

他们邀请人们编写 API 来访问信息。

使用儒略日期时间具有优势:儒略历始于公元前 4713 年 1 月 1 日,在双精度 64 位机器上,从格里高利历到儒略日期时间的转换精确到 20 微秒。因此,在使用 Julian 日期时间时没有 Unix/Windows 限制。

我同意:Python 需要一个from_julian_date方法。当面对时间和日期差异时,我发现用儒略日期时间进行数学运算并转换回公历比破译令人困惑的 Timestamps、dt、Datetimes、H、M、S、tz 等数组要容易得多......FWIW:我不是一个专业的程序员。