简体   繁体   中英

Fill missing values in Pandas dataframe with items in list

What is the best way to fill missing values in dataframe with items from list? For example:

pd.DataFrame([[1,2,3],[4,5],[7,8],[10,11,12],[13,14]])

        0   1   2
    0   1   2   3
    1   4   5 NaN
    2   7   8 NaN
    3  10  11  12
    4  13  14 NaN

list = [6, 9, 150]

to get some something like this:

       0   1   2
   0   1   2   3
   1   4   5   6
   2   7   8   9
   3  10  11  12
   4  13  14  15

this is actually a little tricky and a bit of a hack, if you know the column you want to fill the NaN values for then you can construct a df for that column with the indices of the missing values and pass the df to fillna :

In [33]:
fill = pd.DataFrame(index =df.index[df.isnull().any(axis=1)], data= [6, 9, 150],columns=[2])
df.fillna(fill)

Out[33]:
    0   1    2
0   1   2    3
1   4   5    6
2   7   8    9
3  10  11   12
4  13  14  150

You can't pass a dict (my original answer) as the dict key values are the column values to match on and the scalar value will be used for all NaN values for that column which is not what you want:

In [40]:
l=[6, 9, 150]
df.fillna(dict(zip(df.index[df.isnull().any(axis=1)],l)))

Out[40]:
    0   1   2
0   1   2   3
1   4   5   9
2   7   8   9
3  10  11  12
4  13  14   9

You can see that it has replaced all NaN s with 9 as it matched the missing NaN index value of 2 with column 2 .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM