Python pandas – pd.melt dataframe с индексом datetime приводит к NaN

У меня есть следующий dataframe (sim_2005):

Date ELEM1 ELEM2 ... ELEM1133 2005-01-01 0.021 2.455 ... 345.2 2005-01-02 0.321 2.331 ... 355.1 ... ... ... ... ... 2005-12-31 0.789 3.456 ... 459.9 [365 rows x 1133 columns] 

с Datepandas.tseries.index.DatetimeIndex . Я преобразовал его с помощью @ ami-tavory, используя функцию pandas melt:

  • Python: конвертировать тайм-код UTC в метку времени UTC
  • Как разобрать дату в формате ISO 8601?
  • Найдите ближайшую строку DataFrame до заданного времени в Pandas
  • Формат Наносекунды в Python
  • Может ли SQLAlchemy объекты DateTime быть наивными?
  • выберите на основе временной метки и отметки времени обновления с нулевым значением
  •   sim_2005_melted = pd.melt(sim_2005, id_vars=sim_2005.index.name, value_vars=list(sim_2005.columns.values), var_name='ELEM', value_name='Q_sim').sort(columns='Date') 

    Результат:

     ID Date ELEM Q_sim 1 NaN ELEM1 0.021 2 NaN ELEM1 0.321 ... 366 NaN ELEM2 2.455 367 NaN ELEM2 2.331 ... 402983 NaN ELEM1133 345.2 402984 NaN ELEM1133 355.1 

    По какой-то причине индекс datetime не переносится и столбец заполнен NaN. Любая помощь или идея, что не так?

  • Экстраполировать значения в Pandas DataFrame
  • Python: взвешенный медианный алгоритм с пандами
  • Нахождение растущей тенденции в Пандах
  • Pandas DataFrame concat vs append
  • Как добавить большие объемы данных в Pandas HDFStore и получить уникальный уникальный индекс?
  • Импорт Pandas на сервере Apache вызывает ошибку тайм-аута
  • 2 Solutions collect form web for “Python pandas – pd.melt dataframe с индексом datetime приводит к NaN”

    Вот один из способов использования .stack() для решения вашего вопроса.

     import pandas as pd import numpy as np # try to simulate your data columns = ['ELEM' + str(x) for x in np.arange(1, 1134, 1)] sim_2005 = pd.DataFrame(np.random.randn(365, 1133), index=pd.date_range('2005-01-01', periods=365, freq='D'), columns=columns) processed_sim_2005 = sim_2005.stack().reset_index() processed_sim_2005.columns = ['Date', 'ELEM', 'Q_sim'] Out[82]: Date ELEM Q_sim 0 2005-01-01 ELEM1 0.6221 1 2005-01-01 ELEM2 0.1862 2 2005-01-01 ELEM3 -1.0736 3 2005-01-01 ELEM4 -0.9756 4 2005-01-01 ELEM5 0.8397 ... ... ... ... 413540 2005-12-31 ELEM1129 0.0345 413541 2005-12-31 ELEM1130 0.5522 413542 2005-12-31 ELEM1131 -0.6900 413543 2005-12-31 ELEM1132 -0.2269 413544 2005-12-31 ELEM1133 0.1243 [413545 rows x 3 columns] 

    Предполагая, что Date является индексом вашего DataFrame, вы можете получить столбец даты в вашем расплавленном DataFrame следующим образом:

     sim_2005_melted['Date'] = pd.concat([sim_2005.reset_index().Date for _ in range(sim_2005.shape[1])], ignore_index=True).values 
    Python - лучший язык программирования в мире.