Замена NaN последним известным значением - PullRequest
0 голосов
/ 06 мая 2020

Я новичок с библиотекой pandas, и у меня проблема, я не знаю, как ее решить.

Мой DataFram выглядит так:

x            -438.334631  -436.906133     382.972170   383.068536
y                                                                
-344.226998          NaN          -49            NaN          NaN
-342.018475          NaN          -45            -42          NaN
-340.444794          NaN          NaN            NaN          NaN
-339.102725          NaN          NaN            -40          NaN
-338.879633          NaN          -46            NaN          NaN
-336.414773          NaN          NaN            -46          NaN

И Я хочу заменить каждое NaN в первом столбце на -50, а затем заменить каждое NaN на последнее известное значение слева, чтобы оно выглядело так:

x            -438.334631  -436.906133     382.972170   383.068536
y                                                                
-344.226998          -50          -49            -49          -49
-342.018475          -50          -45            -42          -42
-340.444794          -50          -50            -50          -50
-339.102725          -50          -50            -40          -40
-338.879633          -50          -46            -46          -46
-336.414773          -50          -50            -46          -46

Спасибо!

1 Ответ

2 голосов
/ 06 мая 2020

Если возможно, сначала замените значения прямого заполнения, а затем замените несовпадающие значения, используйте:

df1 = df.ffill(axis=1).fillna(-50)

print (df1)
             -438.334631  -436.906133  382.972170  383.068536
-344.226998        -50.0        -49.0       -49.0       -49.0
-342.018475        -50.0        -45.0       -42.0       -42.0
-340.444794        -50.0        -50.0       -50.0       -50.0
-339.102725        -50.0        -50.0       -40.0       -40.0
-338.879633        -50.0        -46.0       -46.0       -46.0
-336.414773        -50.0        -50.0       -46.0       -46.0

Если необходимо сначала заменить первый столбец, а затем значения прямого заполнения:

df.iloc[:, 0] = 50
df1 = df.ffill(axis=1)

Другое решение, только необходимые уникальные имена столбцов:

df = df.assign(**{df.columns[0]:-50}).ffill(axis=1)
print (df)
             -438.334631  -436.906133  382.972170  383.068536
-344.226998        -50.0        -49.0       -49.0       -49.0
-342.018475        -50.0        -45.0       -42.0       -42.0
-340.444794        -50.0        -50.0       -50.0       -50.0
-339.102725        -50.0        -50.0       -40.0       -40.0
-338.879633        -50.0        -46.0       -46.0       -46.0
-336.414773        -50.0        -50.0       -46.0       -46.0
...