tl;dr
In new_series_1, calories keys don't match with the index values, and the Series is being reindexed with the latter, hence the NaN and float64.
Explanation
First you initialize new_series with calories, which is a dict with int values:
calories= {"Day 1": 450, "Day 2": 500, "day 3": 380}
new_series= pd.Series(calories)
So Pandas knows they can be treated best as int64.
Then you set 2 different values in index, day 1 and day 2, no capitalized:
new_series_1= pd.Series(calories, index=["day 1", "day 2", "day 3"])
There was no more correspondence between calories's keys and index values, so Pandas defaulted to float64 for a best guess.
In fact, an example in the docs shows that:
Constructing Series from a dictionary with an Index specified
d = {'a': 1, 'b': 2, 'c': 3}
ser = pd.Series(data=d, index=['a', 'b', 'c'])
ser
a 1
b 2
c 3
dtype: int64
The keys of the dictionary match with the Index values, hence the Index values have no effect.
d = {'a': 1, 'b': 2, 'c': 3}
ser = pd.Series(data=d, index=['x', 'y', 'z'])
ser
x NaN
y NaN
z NaN
dtype: float64
Note that the Index is first build with the keys from the dictionary.
After this the Series is reindexed with the given Index values, hence
we get all NaN as a result.
And here it explains when it changes dtype, based on Index:
If dtype is None, we find the dtype that best fits the data. If an
actual dtype is provided, we coerce to that dtype if it’s safe.
Otherwise, an error will be raised.