如何使用PANDAS使用PANDAS重新采样一年中的一天'数据(Python)

发布于 2025-01-19 22:53:19 字数 520 浏览 0 评论 0原文

我的 pandas 数组看起来像这样...

     DOY Value
0      5  5118
1     10  5098
2     15  5153

我一直在尝试使用 pandas resample 函数重新采样我的数据并填补空白。我担心的是,由于我尝试在不使用直接日期时间值的情况下重新采样,因此我将无法对数据重新采样。

我尝试使用以下代码行解决此问题,但收到错误消息,指出我正在使用范围索引。也许我需要以某种方式使用周期索引,但我不知道如何去做。

inter.resample('1D').mean().interpolate()

这是我想要的结果

     DOY Value
0      5  5118
1      6  5114
2      7  5110
3      8  5106
4      9  5102
5     10  5098
:      :    :
10    15  5153

My pandas array looks like this...

     DOY Value
0      5  5118
1     10  5098
2     15  5153

I've been trying to resample my data and fill in the gaps using pandas resample function. My worry is that since I'm trying to resample without using direct datetime values, I won't be able to resample my data.

My attempt to solve this was using the following line of code but got an error saying I was using Range Index. Perhaps I need to use Period Index somehow, but I'm not sure how to go about it.

inter.resample('1D').mean().interpolate()

Here's my intended result

     DOY Value
0      5  5118
1      6  5114
2      7  5110
3      8  5106
4      9  5102
5     10  5098
:      :    :
10    15  5153

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夏见 2025-01-26 22:53:19

转换to_datetime,执行重新采样,然后删除不需要的列:

df["date"] = pd.to_datetime(df["DOY"].astype(str),format="%j")
output = df.resample("D", on="date").last().drop("date", axis=1).interpolate().reset_index(drop=True)

>>> output
     DOY   Value
0    5.0  5118.0
1    6.0  5114.0
2    7.0  5110.0
3    8.0  5106.0
4    9.0  5102.0
5   10.0  5098.0
6   11.0  5109.0
7   12.0  5120.0
8   13.0  5131.0
9   14.0  5142.0
10  15.0  5153.0

Convert to_datetime, perform the resample and then drop the unwanted column:

df["date"] = pd.to_datetime(df["DOY"].astype(str),format="%j")
output = df.resample("D", on="date").last().drop("date", axis=1).interpolate().reset_index(drop=True)

>>> output
     DOY   Value
0    5.0  5118.0
1    6.0  5114.0
2    7.0  5110.0
3    8.0  5106.0
4    9.0  5102.0
5   10.0  5098.0
6   11.0  5109.0
7   12.0  5120.0
8   13.0  5131.0
9   14.0  5142.0
10  15.0  5153.0
杯别 2025-01-26 22:53:19

pd.DataFrame.interpolate 适用于索引。因此,让我们从设置一个适当的索引开始,然后设置一个新的索引,我们将在其上进行插值。

d0 = df.set_index('DOY')
idx = pd.RangeIndex(d0.index.min(), d0.index.max()+1, name='DOY')

d0.reindex(idx).interpolate().reset_index()

      DOY   Value
0       5  5118.0
1       6  5114.0
2       7  5110.0
3       8  5106.0
4       9  5102.0
5      10  5098.0
6      11  5109.0
7      12  5120.0
8      13  5131.0
9      14  5142.0
10     15  5153.0

pd.DataFrame.interpolate works on the index. So let's start with setting an appropriate index and then a new one over which we will interpolate.

d0 = df.set_index('DOY')
idx = pd.RangeIndex(d0.index.min(), d0.index.max()+1, name='DOY')

d0.reindex(idx).interpolate().reset_index()

      DOY   Value
0       5  5118.0
1       6  5114.0
2       7  5110.0
3       8  5106.0
4       9  5102.0
5      10  5098.0
6      11  5109.0
7      12  5120.0
8      13  5131.0
9      14  5142.0
10     15  5153.0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文