#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')