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