input: Write a python function to fill missing values with column means in a DataFrame.
  assert fill_missing_values(pd.DataFrame({'A': [1, 2, None, 4], 'B': [None, 2, 3, 4]})).equals(pd.DataFrame({'A': [1, 2, 2.3333333333333335, 4], 'B': [3, 2, 3, 4]}))
  assert fill_missing_values(pd.DataFrame({'A': [1, None, 3], 'B': [1, 2, None]})).equals(pd.DataFrame({'A': [1, 2, 3], 'B': [1, 2, 1.5]}))
  assert fill_missing_values(pd.DataFrame({'A': [None, None, None], 'B': [1, 2, 3]})).equals(pd.DataFrame({'A': [None, None, None], 'B': [1, 2, 3]}))
output: def fill_missing_values(df):
      return df.apply(lambda col: col.fillna(col.mean()) if col.dtype in [float, int] else col)