gpt4 book ai didi

Python:按日期时间索引pandas系列

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

我是 python 新手,遇到以下问题:

我将每日测量值导入到 pd.series 对象中。问题在于,无论是 1 月还是 2 月,数据每月总是有 31 个测量值。如果相应月份的天数少于 31 天,则超过该月最后一天的天数的测量值将设置为零。但一个月内缺失的数据也被设置为零。 4 月和 5 月的数据如下所示。

1990-04-01    25.870
1990-04-01 26.205
1990-04-01 12.283
1990-04-01 19.630
1990-04-01 19.239
1990-04-01 23.614
1990-04-01 40.891
1990-04-01 41.152
1990-04-01 35.935
1990-04-01 25.682
1990-04-01 21.674
1990-04-01 15.818
1990-04-01 11.413
1990-04-01 16.522
1990-04-01 33.543
1990-04-01 28.727
1990-04-01 18.043
1990-04-01 10.326
1990-04-01 19.159
1990-04-01 21.848
1990-04-01 35.250
1990-04-01 39.152
1990-04-01 31.522
1990-04-01 23.152
1990-04-01 13.250
1990-04-01 20.705
1990-04-01 27.304
1990-04-01 24.478
1990-04-01 33.674
1990-04-01 32.591
1990-04-01 0.000
1990-05-01 40.370
1990-05-01 41.609
1990-05-01 47.478
1990-05-01 40.682
1990-05-01 42.587
1990-05-01 38.826
1990-05-01 35.543
1990-05-01 30.955
1990-05-01 23.543
1990-05-01 7.857
1990-05-01 0.000
1990-05-01 0.000
1990-05-01 0.000
1990-05-01 0.000
1990-05-01 0.000
1990-05-01 0.000
1990-05-01 54.133
1990-05-01 41.114
1990-05-01 44.739
1990-05-01 43.848
1990-05-01 26.739
1990-05-01 21.318
1990-05-01 26.750
1990-05-01 54.864
1990-05-01 33.000
1990-05-01 33.304
1990-05-01 34.304
1990-05-01 20.886
1990-05-01 20.250
1990-05-01 24.804
1990-05-01 28.091
Length: 62

有没有办法删除那些不属于相应月份的条目并为每天提供新的时间索引?我需要在一个月内保留零。

最佳答案

首先,我将用 NaN 替换 0(以表示丢失的数据):

s.replace(0, np.nan, inplace=True)

一种方法是创建一个作用于每个组(月)的函数:

def f(s_month):
date = s_month.index[0]
# create the month long range
rng = pd.date_range(date, date + pd.offsets.MonthEnd(1), freq='D')
# throw away results longer than month length
s_month = s_month.iloc[0:len(rng)]
# reindex those remaining
s_month.index = rng
return s_month

注意:这要求您有一个 DatetimeIndex,即 s.index = pd.to_datetime(s.index)

In [11]: s_month = s.loc['1990-04-01']

In [12]: f(s_month)
Out[12]:
1990-04-01 25.870
1990-04-02 26.205
1990-04-03 12.283
1990-04-04 19.630
...
1990-04-28 24.478
1990-04-29 33.674
1990-04-30 32.591
Freq: D, Name: Value, dtype: float64

将此与 groupby 应用一起使用:

In [13]: res = s.groupby(s.index).apply(f)

In [14]: res
Out[14]:
1990-04-01 1990-04-01 25.870
1990-04-02 26.205
1990-04-03 12.283
1990-04-04 19.630
...

更正多重索引:

In [15]: res.index = res.index.droplevel(0)

In [16]: res
Out[16]:
1990-04-01 25.870
1990-04-02 26.205
1990-04-03 12.283
...

关于Python:按日期时间索引pandas系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20149544/

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