#python #pandas #dataframe #hierarchical
#python #pandas #фрейм данных #иерархический
Вопрос:
После попытки его выравнивания у меня есть фрейм данных pandas следующим образом:
df = pd.DataFrame(web.DataReader(stocks, 'yahoo', day, day).iloc[0]).unstack(level=0).droplevel(level=0, axis=1)
Attributes adjClose close ... volume date
Symbols ...
FB 261.399994 261.399994 ... 13587000.0 2020-10-19
AAPL 115.980003 115.980003 ... 120639300.0 2020-10-19
AMZN 3207.209961 3207.209961 ... 5223600.0 2020-10-19
GOOG 1534.609985 1534.609985 ... 1607100.0 2020-10-19
NFLX NaN NaN ... NaN 2020-10-19
Я пытаюсь сохранить это в базе данных; однако я не вижу символов в df.columns.
Чтобы сохранить df в следующем формате:
Symbols adjClose close ... volume date
FB 261.399994 261.399994 ... 13587000.0 2020-10-19
AAPL 115.980003 115.980003 ... 120639300.0 2020-10-19
AMZN 3207.209961 3207.209961 ... 5223600.0 2020-10-19
GOOG 1534.609985 1534.609985 ... 1607100.0 2020-10-19
NFLX NaN NaN ... NaN 2020-10-19
Любые предложения о том, как этого добиться? В моей базе данных есть составной ключ для символов, столбцов даты.
Спасибо.
Ответ №1:
Symbols — это ваш индекс dataframes, который вам нужно будет использовать reset_index
, чтобы поместить его в сам фрейм. Попробуйте это:
df = (pd.DataFrame(web.DataReader(stocks, 'yahoo', day, day)
.iloc[0])
.unstack(level=0)
.droplevel(level=0, axis=1)
.rename_axis(columns=None) # Gets rid of the "Attributes"
.reset_index() # Puts "Symbols" as an actual column, not as the index
)
Мое дополнение 2:
rename_axis
Это должно избавиться от вашего заголовка «Атрибуты». Это в основном для визуальных целей при печати, но может сбить с толку людей, которые не привыкли работать с многоиндексными данными. По сути, ваши метки столбцов хранятся вIndex
объекте. У этогоIndex
объекта может быть имя, поэтому «Атрибуты» — это имя ваших столбцов (довольно странная концепция, которая не очень полезна для обычных индексов, но очень полезна при работе с aMultiIndex
).reset_index()
Похоже, что ваш столбец «Символы» на самом деле не является столбцом (именно поэтому он не отображается,df.columns
а скорее является индексом для фрейма данных. Добавление этого метода приведет к вставке индекса «Символы» в виде столбца во фрейм данных и созданию нового простого индексаRangeIndex
, который охватывает от 0 до длины вашего фрейма данных.