splinter
splinter

Reputation: 3907

Filling nulls with a list in Pandas using fillna

Given a pd.Series, I would like to replace null values with a list. That is, given:

import numpy as np
import pandas as pd
ser = pd.Series([0,1,np.nan])

I want a function that would return

0        0
1        1
2    [nan]

But if I try using the natural function for this, namely fillna:

result = ser.fillna([np.nan])

but I get the error

TypeError: "value" parameter must be a scalar or dict, but you passed a "list"

Any suggestions of a simple way to acheive this?

Upvotes: 9

Views: 9941

Answers (4)

user__42
user__42

Reputation: 573

I ended up using

ser.loc[ser.isnull()] = ser.loc[ser.isnull()].apply(lambda x: [np.nan]) 

because pd.isnull(x) would give me ambiguous truth values error ( i have other lists in my series too ). This is a combination of YOBEN_S' and jezrael's answer.

Upvotes: 3

aaronpenne
aaronpenne

Reputation: 600

fillna can take a Series, and a list can be converted to a Series. Wrapping your list in pd.Series() worked for me:

result = ser.fillna(pd.Series([np.nan]))

result
0    0.0
1    1.0
2    NaN
dtype: float64

Upvotes: 0

BENY
BENY

Reputation: 323356

You can change to object

ser=ser.astype('object')

Then assign the list np.nan

ser.loc[ser.isnull()]=[[np.nan]]

Upvotes: 3

jezrael
jezrael

Reputation: 863301

Use apply, because fillna working with scalars only:

print (ser.apply(lambda x: [np.nan] if pd.isnull(x) else x))
0        0
1        1
2    [nan]
dtype: object

Upvotes: 15

Related Questions