gpt4 book ai didi

python - 如何用单个 NaN 替换 pandas 数据框中的多个 NaN 行

转载 作者:行者123 更新时间:2023-12-02 02:01:14 24 4
gpt4 key购买 nike

我有一个时间序列,其中一列主要包含 NaN。数据帧非常大,因此处理所有这些 NaN 正在成为一种负担。如果我简单地将它们全部删除,则剩余数据点之间的插值会导致绘图完全困惑。

这是我所拥有的一个简短示例:

        v           x
0.0000 0.000000 NaN
0.0002 0.062791 NaN
0.0004 0.125333 NaN
0.0006 0.187381 95.0
0.0008 0.248690 NaN
0.0010 0.309017 NaN
0.0012 0.368125 NaN
0.0014 0.425779 88.0
0.0016 0.481754 85.0
0.0018 0.535827 91.0
0.0020 0.587785 NaN
0.0022 0.637424 NaN
0.0024 0.684547 NaN
0.0026 0.728969 99.0
...

以及我想要实现的目标:

        v           x
0.0004 0.125333 NaN
0.0006 0.187381 95.0
0.0012 0.368125 NaN
0.0014 0.425779 88.0
0.0016 0.481754 85.0
0.0018 0.535827 91.0
0.0024 0.684547 NaN
0.0026 0.728969 99.0
...

遍历行不是一个选择,因为它会减慢速度,但我无法找出任何合理的方法。有什么想法吗?


要使用的数据集示例(相当短):

import pandas as pd
import numpy as np
f=50
Tmax = 1
fs= 5000

df = pd.DataFrame(index=np.arange(0, Tmax, 1/fs), data={'x':np.random.randint(0,100, size=int(fs*Tmax))})
df['v'] = np.sin(2*np.pi*f*df.index)

# Most of "x" is NaN
df.loc[df['x']<75, 'x'] = np.NaN

最佳答案

使用boolean indexing与比较Series.shift编辑和Series.notna并通过 | 进行按位 OR 链接:

df = df[df.x.shift(-1).notna() | df.x.notna()]
print (df)
v x
0.0004 0.125333 NaN
0.0006 0.187381 95.0
0.0012 0.368125 NaN
0.0014 0.425779 88.0
0.0016 0.481754 85.0
0.0018 0.535827 91.0
0.0024 0.684547 NaN
0.0026 0.728969 99.0

关于python - 如何用单个 NaN 替换 pandas 数据框中的多个 NaN 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60183881/

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