I have a python pandas dataframe representing a superset. The data contains a lot of nulls which I want to overwrite with real values.

the superset has:
 - both numerical and categorical data
 - some nulls for most attributes
 - multi class attributes (attributes can have multiple values)
 - It is not time dependent
 - each row is a unique person

It would be neat to use machine learning to fill in the nulls, any recommendations on how I can do this?

(I guess that I can tranform the categorical data to numerical if required)