Replace Null Values
To replace null values, we can use the following functions:
-
bfill and bfill! : back fill the null values with the next non-null value.
-
ffill and ffill! : forward fill the null values with the previous non-null value.
-
lfill and lfill! : linearly fill the null values between 2 non-null values.
-
nullFill and nullFill! : fill the null values with a prescribed value.
For both bfill
and ffill
, we can use an optional
parameter limit to limit the number of null values to fill for each block of null
values.
Example 1:
ID=take(1,6) join take(2,6)
date=take(2018.01.01..2018.01.06, 12)
x=3.2 5.2 NULL 7.4 NULL NULL NULL NULL 8 NULL NULL 11
t=table(ID, date, x);
t;
ID | date | x |
---|---|---|
1 | 2018.01.01 | 3.2 |
1 | 2018.01.02 | 5.2 |
1 | 2018.01.03 | |
1 | 2018.01.04 | 7.4 |
1 | 2018.01.05 | |
1 | 2018.01.06 | |
2 | 2018.01.01 | |
2 | 2018.01.02 | |
2 | 2018.01.03 | 8 |
2 | 2018.01.04 | |
2 | 2018.01.05 | |
2 | 2018.01.06 | 11 |
update t set x=x.lfill() context by id;
t;
ID | date | x |
---|---|---|
1 | 2018.01.01 | 3.2 |
1 | 2018.01.02 | 5.2 |
1 | 2018.01.03 | 6.3 |
1 | 2018.01.04 | 7.4 |
1 | 2018.01.05 | |
1 | 2018.01.06 | |
2 | 2018.01.01 | |
2 | 2018.01.02 | |
2 | 2018.01.03 | 8 |
2 | 2018.01.04 | 9 |
2 | 2018.01.05 | 10 |
2 | 2018.01.06 | 11 |
update t set x=x.bfill(1) context by id;
t;
ID | date | x |
---|---|---|
1 | 2018.01.01 | 3.2 |
1 | 2018.01.02 | 5.2 |
1 | 2018.01.03 | 6.3 |
1 | 2018.01.04 | 7.4 |
1 | 2018.01.05 | |
1 | 2018.01.06 | |
2 | 2018.01.01 | |
2 | 2018.01.02 | 8 |
2 | 2018.01.03 | 8 |
2 | 2018.01.04 | 9 |
2 | 2018.01.05 | 10 |
2 | 2018.01.06 | 11 |
update t set x=x.bfill() context by id;
t;
ID | date | x |
---|---|---|
1 | 2018.01.01 | 3.2 |
1 | 2018.01.02 | 5.2 |
1 | 2018.01.03 | 6.3 |
1 | 2018.01.04 | 7.4 |
1 | 2018.01.05 | |
1 | 2018.01.06 | |
2 | 2018.01.01 | 8 |
2 | 2018.01.02 | 8 |
2 | 2018.01.03 | 8 |
2 | 2018.01.04 | 9 |
2 | 2018.01.05 | 10 |
2 | 2018.01.06 | 11 |
update t set x=x.ffill() context by id;
t;
ID | date | x |
---|---|---|
1 | 2018.01.01 | 3.2 |
1 | 2018.01.02 | 5.2 |
1 | 2018.01.03 | 6.3 |
1 | 2018.01.04 | 7.4 |
1 | 2018.01.05 | 7.4 |
1 | 2018.01.06 | 7.4 |
2 | 2018.01.01 | 8 |
2 | 2018.01.02 | 8 |
2 | 2018.01.03 | 8 |
2 | 2018.01.04 | 9 |
2 | 2018.01.05 | 10 |
2 | 2018.01.06 | 11 |
Example2:
ID=take(1,6) join take(2,6)
date=take(2018.01.01..2018.01.06, 12)
x=3.2 5.2 NULL 7.4 NULL NULL NULL NULL 8 NULL NULL 11
t=table(ID, date, x);
t;
ID | date | x |
---|---|---|
1 | 2018.01.01 | 3.2 |
1 | 2018.01.02 | 5.2 |
1 | 2018.01.03 | |
1 | 2018.01.04 | 7.4 |
1 | 2018.01.05 | |
1 | 2018.01.06 | |
2 | 2018.01.01 | |
2 | 2018.01.02 | |
2 | 2018.01.03 | 8 |
2 | 2018.01.04 | |
2 | 2018.01.05 | |
2 | 2018.01.06 | 11 |
update t set x=x.nullFill(avg(x)) context by id;
t;
ID | date | x |
---|---|---|
1 | 2018.01.01 | 3.2 |
1 | 2018.01.02 | 5.2 |
1 | 2018.01.03 | 5.266667 |
1 | 2018.01.04 | 7.4 |
1 | 2018.01.05 | 5.266667 |
1 | 2018.01.06 | 5.266667 |
2 | 2018.01.01 | 9.5 |
2 | 2018.01.02 | 9.5 |
2 | 2018.01.03 | 8 |
2 | 2018.01.04 | 9.5 |
2 | 2018.01.05 | 9.5 |
2 | 2018.01.06 | 11 |