df = pd.DataFrame({'a': [1] * 10, 'b': [1, 2] * 5, 'c': list(range(10))})
df2 = pd.DataFrame({'e': [1, 1], 'd': [1, 2]})
orig = df.dtypes.to_dict()
Preserve Dataframe column data type after outer merge