Regression in Python with many NaN values spread across all columns
If you have 3 completely different data sources where there are no common columns consider creating 3 separate models instead of trying to force them into one.

If you have overlapping columns as well handling of NaN values can be influenced by your model choice. (i.e. most tree based model can handle missing values) If you use linear regression you need to have numerical values and you can experiment with several options:


adding new variables indicating if a certain variable is missing or not (0/1)
instead of using 0 for the missing values experiment replacing them with either median/mean/random value from the original distribution of the variable (as a result your new data will have the same distribution of values as the original one)
create model for predicting variables containing missing values and use it to replace NaNs
use some dimensionality reduction if your matrix is too big and sparse