python - Pandas - Variation on filling NaN - What's an elegant and pythonic way to do this? -


good evening

in dataframe below, column 'c' has few nans

what nice, pythonic way fill first n nans value , remaining nans one

(example: fill first 3 nans value 10 , remaining 2 nans value 20)

thanks

    b   c  5  5 nan b  5  8   8 c  0  1 nan d  8  5   6 e  1  6 nan f  2  5   8 g  6  5   5 h  0  1   3  7  3 nan j  2  6 nan 

edit - 1 (un-pythonic) way:

nan_number = df['c'].isnull().cumsum()[df['c'].isnull()]  df['c'][nan_number.index[nan_number<=3]] = 10 df['c'][nan_number.index[nan_number>3]] = 20 

edit ii - starts better:

nan_rows = df.index[df['c'].isnull()] df.loc[nan_rows[:3], 'c'] = 10   df.loc[nan_rows[3:], 'c'] = 20 

you use fillna, takes limit param:

in [75]:  df = df.fillna(10,limit=3) df = df.fillna(20) df out[75]:     b   c  5  5  10 b  5  8   8 c  0  1  10 d  8  5   6 e  1  6  10 f  2  5   8 g  6  5   5 h  0  1   3  7  3  20 j  2  6  20 

if prefer one-liner can chain calls fillna:

in [80]:  df = df.fillna(10,limit=3).fillna(20) df out[80]:     b   c  5  5  10 b  5  8   8 c  0  1  10 d  8  5   6 e  1  6  10 f  2  5   8 g  6  5   5 h  0  1   3  7  3  20 j  2  6  20