gpt4 book ai didi

python - 如何找到具有时间戳索引的 DataFrame 中的前一行?

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

我想将 Pandas 中 DataFrame 开头的最后一个 NaN 归零。我的 DataFrame 对象有时间戳。

示例数据

如果我有这些数据:

In [228]: my_df
Out[228]:
blah
1990-01-01 NaN
1990-01-02 NaN
1990-01-03 NaN
1990-01-04 NaN
1990-01-05 NaN
1990-01-06 5
1990-01-07 6
1990-01-08 7
1990-01-09 NaN
1990-01-10 9

[10 rows x 1 columns]

我想得到以下信息(在 1 月 5 日更改值):

            blah
1990-01-01 NaN
1990-01-02 NaN
1990-01-03 NaN
1990-01-04 NaN
1990-01-05 0
1990-01-06 5
1990-01-07 6
1990-01-08 7
1990-01-09 NaN
1990-01-10 9

[10 rows x 1 columns]

我尝试过的

我可以得到最后一个 NaN 之后的索引:

In [229]: ts = my_df['blah'].first_valid_index()

In [230]: ts
Out[230]: Timestamp('1990-01-06 00:00:00', tz=None)

我发现了这种丑陋的方法:

my_df['blah'][:ts][-2] = 0

但是,如果我的 DataFrame 在开始时没有任何 NaN,这将抛出 IndexError 。更好的解决方案是什么样的(大概不只是编写一个 for 循环)?

最佳答案

也许只需使用 try.. except 处理 IndexError:

try:
df.loc[:ts, 'blah'][-2] = 0
except IndexError:
pass

if语句:

s = df.loc[:ts, 'blah']
if len(s) > 1:
s[-2] = 0

由于 :ts 是一个基本切片,因此 s 是一个 View 。因此修改 s 会修改 df

关于python - 如何找到具有时间戳索引的 DataFrame 中的前一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23134911/

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