Прежде всего, это не NaN
, это NaT
(не отметка времени), которая уникальна для Pandas, хотя Pandas делает ее совместимой с NaN и использует ее аналогичноNaN в столбцах с плавающей точкой, чтобы пометить отсутствующие данные.
То, что делает pd.Series(data, index=index)
, по-видимому, зависит от типа data
. Если data
является списком, то index
должен иметь одинаковую длину, и будет создан новый Series
, с данными data
и индексом index
. Однако, если data
уже является Series
(например, df['Date']
), он вместо этого возьмет строки, соответствующие index
, и создаст новый Series
из этих строк. Например:
pd.Series(df['Date'], [1, 1, 4])
даст вам
1 2018-07-10
1 2018-07-10
4 2018-07-13
, где 2018-07-10
происходит из строки № 1, а 2018-07-11
из строки № 4 из df['Date']
. Однако в ваших исходных входных данных нет строки с индексом 40
, 70
или 30
, поэтому отсутствуют пропущенные данные и вместо них вставляется NaT
.
В отличие от этого,что вы получаете, когда вместо этого используете список:
pd.Series(df['Date'].to_list(), index=df['Number'])
# => Number
# 40 2018-07-09
# 40 2018-07-10
# 40 2018-07-11
# 70 2018-07-12
# 30 2018-07-13
# dtype: datetime64[ns]