用倒数第三个值替换 NaN 值
Replace NaN values with third to last value
我刚开始使用 Python,我的计算存在以下问题。
我有一个 table,其中包含 NaN
个值。
NaN
值总是出现在晚上,因为那里无法测量太阳辐射。
我想用日落前 4 小时的值替换一个晚上的所有 NaN
值。
我已经尝试使用 Ffill
命令,但由于我不需要 NaN
值之前的最后一个值,所以不幸的是它不起作用。
例如:
a=[0.88, 0.84, 0.26, 0.50, 1.17, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.73, 0.81]
连续的 NaN
值都应具有值 0.84
。
因此,该列表应如下所示:
a=[0.88, 0.84, 0.26, 0.50, 1.17, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.73, 0.81]
提前致谢。
import pandas as pd
a = [0.88, 0.84, 0.26, 0.50, 1.17, None, None, None, None, None, None, None, None, 0.73, 0.81]
df = pd.DataFrame(a)
df[3:] = df[3:].fillna(value=df.iloc[1, 0])
print(df)
0
0 0.88
1 0.84
2 0.26
3 0.50
4 1.17
5 0.84
6 0.84
7 0.84
8 0.84
9 0.84
10 0.84
11 0.84
12 0.84
13 0.73
14 0.81
一个选项是创建原始系列的 shift
ed 和 ffill
ed 版本,然后仅使用它来填充原始数据的空值:
In [231]: s.fillna(s.shift(3).mask(s.isnull()).ffill())
Out[231]:
0 0.88
1 0.84
2 0.26
3 0.50
4 1.17
5 0.84
6 0.84
7 0.84
8 0.84
9 0.84
10 0.84
11 0.84
12 0.84
13 0.73
14 0.81
dtype: float64
a=[0.88, 0.84, 0.26, 0.50, 1.17, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.73, 0.81]
a = np.array(a)
a[np.isnan(a)] = a[1]
a
结果:
array([0.88, 0.84, 0.26, 0.5 , 1.17, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84,
0.84, 0.84, 0.73, 0.81])
我刚开始使用 Python,我的计算存在以下问题。
我有一个 table,其中包含 NaN
个值。
NaN
值总是出现在晚上,因为那里无法测量太阳辐射。
我想用日落前 4 小时的值替换一个晚上的所有 NaN
值。
我已经尝试使用 Ffill
命令,但由于我不需要 NaN
值之前的最后一个值,所以不幸的是它不起作用。
例如:
a=[0.88, 0.84, 0.26, 0.50, 1.17, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, 0.73, 0.81]
连续的 NaN
值都应具有值 0.84
。
因此,该列表应如下所示:
a=[0.88, 0.84, 0.26, 0.50, 1.17, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.73, 0.81]
提前致谢。
import pandas as pd
a = [0.88, 0.84, 0.26, 0.50, 1.17, None, None, None, None, None, None, None, None, 0.73, 0.81]
df = pd.DataFrame(a)
df[3:] = df[3:].fillna(value=df.iloc[1, 0])
print(df)
0
0 0.88
1 0.84
2 0.26
3 0.50
4 1.17
5 0.84
6 0.84
7 0.84
8 0.84
9 0.84
10 0.84
11 0.84
12 0.84
13 0.73
14 0.81
一个选项是创建原始系列的 shift
ed 和 ffill
ed 版本,然后仅使用它来填充原始数据的空值:
In [231]: s.fillna(s.shift(3).mask(s.isnull()).ffill())
Out[231]:
0 0.88
1 0.84
2 0.26
3 0.50
4 1.17
5 0.84
6 0.84
7 0.84
8 0.84
9 0.84
10 0.84
11 0.84
12 0.84
13 0.73
14 0.81
dtype: float64
a=[0.88, 0.84, 0.26, 0.50, 1.17, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, 0.73, 0.81]
a = np.array(a)
a[np.isnan(a)] = a[1]
a
结果:
array([0.88, 0.84, 0.26, 0.5 , 1.17, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84,
0.84, 0.84, 0.73, 0.81])