gpt4 book ai didi

python - 将朱利安日期解析为月份和月份日期

转载 作者:太空宇宙 更新时间:2023-11-03 17:27:19 24 4
gpt4 key购买 nike

我有以下内容。数据框:

   County Year  JD  Tot_P  Min_P
0 Ady 2000 1 127 10.03
1 Ady 2000 2 127 10.03
2 Ady 2000 3 127 10.03
3 Ady 2000 4 127 10.03
4 Ady 2000 5 127 10.03

此处 JD 是儒略日(1...365 表示一年中的每一天;1 - 366 表示闰年)。我想再添加 2 列,1 列代表月份,1 列代表一个月中的某一天。这是我现在正在做的事情:

from datetime import date
df['MONTH'] = df[['Year','JD']].apply(lambda s: date.fromordinal(date(df.Year, 1, 1).toordinal() + df.JD - 1).month)
df['DAY'] = df[['Year','JD']].apply(lambda s: date.fromordinal(date(df.Year, 1, 1).toordinal() + df.JD - 1).day)

但是,我收到错误:

TypeError: ("cannot convert the series to <type 'int'>", u'occurred at index Year')

如何解决这个问题?

最佳答案

这是一种矢量化方法,应该具有相当高的性能。

读入数据

In [14]: df = read_csv(StringIO(data),sep='\s+')

In [15]: df
Out[15]:
County Year JD Tot_P Min_P
0 Ady 2000 1 127 10.03
1 Ady 2000 2 127 10.03
2 Ady 2000 3 127 10.03
3 Ady 2000 4 127 10.03
4 Ady 2000 5 127 10.03

直接创建日期时间列;儒略日期只是添加到开始日期的天数(减去 1,因为您是从第 1 天开始)。

In [21]: df['date'] = pd.to_datetime(df['Year'],format='%Y') + pd.to_timedelta(df['JD'],unit='D') - Timedelta('1D')

In [22]: df
Out[22]:
County Year JD Tot_P Min_P date
0 Ady 2000 1 127 10.03 2000-01-01
1 Ady 2000 2 127 10.03 2000-01-02
2 Ady 2000 3 127 10.03 2000-01-03
3 Ady 2000 4 127 10.03 2000-01-04
4 Ady 2000 5 127 10.03 2000-01-05

您可以使用 .dt 访问器执行很多操作,请参阅文档 here

In [23]: df.date.dt.day
Out[23]:
0 1
1 2
2 3
3 4
4 5
dtype: int64

In [24]: df.date.dt.month
Out[24]:
0 1
1 1
2 1
3 1
4 1
dtype: int64

In [25]: df.date.dt.year
Out[25]:
0 2000
1 2000
2 2000
3 2000
4 2000
dtype: int64

关于python - 将朱利安日期解析为月份和月份日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32384107/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com