我相信你需要to_datetime
参数origin
:
df = pd.DataFrame({'julian':[2458072.5, 2458073.5]})
df['date'] = pd.to_datetime(df['julian'], unit='D', origin='julian')
print (df)
julian date
0 2458072.5 2017-11-15
1 2458073.5 2017-11-16
编辑:
某个日期时间有问题OutOfBounds
。
因此,首先检查时间戳限制:
In [66]: pd.Timestamp.min
Out[66]: Timestamp('1677-09-21 00:12:43.145225')
In [67]: pd.Timestamp.max
Out[67]: Timestamp('2262-04-11 23:47:16.854775807')
然后获得最小的朱利安日期时间(通过convertin在线,例如在此处):
maxdate = 2547338
mindate = 2333836
df = pd.DataFrame({'julian':[2821676, 2547338, 1, 2333836]})
maxdate = 2547338
mindate = 2333836
clean_dates = df['julian'].where(df['julian'].between(mindate, maxdate))
print (clean_dates)
0 NaN
1 2547338.0
2 NaN
3 2333836.0
df['date'] = pd.to_datetime(clean_dates, unit='D', origin='julian')
print (df)
julian date
0 2821676 NaT
1 2547338 2262-04-10 12:00:00
2 1 NaT
3 2333836 1677-09-21 12:00:00
最后将解决方案应用于您的数据-有2个值转换为NaT
:
print (df['MXPLD_DATE'][~df['MXPLD_DATE'].between(mindate, maxdate)])
1217806 2821676
3167148 2821676
Name: MXPLD_DATE, dtype: int64
clean_dates = df['MXPLD_DATE'].where(df['MXPLD_DATE'].between(mindate, maxdate))
df['MXPLD_DATE'] = pd.to_datetime(clean_dates, unit='D', origin='julian')
print (df['MXPLD_DATE'])
0 2015-06-10 12:00:00
1 2015-05-12 12:00:00
2 2015-05-12 12:00:00
3 2015-05-12 12:00:00
4 2015-05-12 12:00:00
5 2015-05-12 12:00:00
6 2015-05-12 12:00:00
7 2015-05-12 12:00:00
8 2015-05-12 12:00:00
9 2015-05-12 12:00:00
10 2015-05-12 12:00:00