PERF: data = np.nan to speed up empty dataframe creation 
- [x] closes #28188 

- Short summary
If we have enough information to know the shape of the final
dataframe, we set the value of data to np.nan if not set.

- Longer explanation
If I understand correctly the `__init__` of DataFrame, with this change 
when the first if evaluates True then all following ifs evaluate False 
until we enter the else in [frame.py:459](https://github.com/pandas-dev/pandas/blob/03b3c8fc82b3a18a3ddcad1b3b26d601467fc74c/pandas/core/frame.py#L459), and we are done because now the dataframe is initialized with a ndarray.
With the former behavior `data` defaults always to None,
hence the output dataframe has all dtypes object and its creation
is slow.
With the proposed code the output dataframe has all dtypes float and is
faster to create than before, but only when columns and index are given.

I don't know how to loose the current restriction of `dtype=None`. It would be nice to have a function that verifies that a type is compatible with nan.

first thing we look for a is a test > 
> 
> first thing we look for a is a test

ofc! But I wanted to see also the results of CI to check what I'm breaking ;) Hi @astyonax - thanks for the contribution. It looks like this might be an incomplete change however so going to close for the time being to keep our PR queue down.

Best advice I can give is to run the tests locally and make sure the change doesn't cause any regressions before pushing to CI. We have performance benchmarks you can run thereafter to measure improvements.

More info can be found in the contributing guide so be sure to give that a look:

https://pandas.pydata.org/pandas-docs/stable/development/contributing.html#contributing-to-pandas What kind of tests are needed on this one?