Создание фрейма данных из другого фрейма данных и использование DatetimeIndex заполняет столбцы NaN

#python #pandas #dataframe

Вопрос:

 df1 = pd.DataFrame(
    {
        "Prod":  [10, 20],
        "Sales":    [1, 4],
        "DT":       ["2021-05-01 15:05:01", "2021-05-01 15:05:05"]
    },
    index=None
)

  Prod  Sales   DT
0   10    1     2021-05-01 15:05:01
1   20    4     2021-05-01 15:05:05
 

Итак, теперь я создаю новый фрейм данных, просто используя столбец «Prod» и «DT» для индекса.

 df2 = pd.DataFrame(
    df1["Prod"],
    index=pd.DatetimeIndex(df1["DT"])
)

                   Prod
DT  
2021-05-01 15:05:01 NaN
2021-05-01 15:05:05 NaN
 

Значения для «Prod» не были выбраны, и мне нужно сначала преобразовать столбец «Prod» в список.

 df2 = pd.DataFrame(
    list(df1["Prod"]),
    columns=["Prod"],
    index=pd.DatetimeIndex(df1["DT"])
)

                   Prod
DT  
2021-05-01 15:05:01 10
2021-05-01 15:05:05 20
 

Так в чем же проблема с исходным кодом? Я бы подумал, что Панды выдали бы ошибку, если бы она была несчастной.

Комментарии:

1. это не удается, потому что Панды выравниваются по индексу перед любым вычислением; если вы не хотите этого выравнивания, то list выбор правильный, или вы можете просто получить доступ к данным ниже с помощью df1.Prod.array

Ответ №1:

Проблема заключалась в том, что df1['Prod'] это серия панд со своим собственным индексом ( 0 , 1 ). Когда вы указали новый индекс с index=pd.DatetimeIndex(df1["DT"] помощью , старый и новый индексы не совпадают. Следовательно, вы получили NaN .

Решение простое:

 df2 = df1[['Prod', 'DT']].set_index('DT')