#python #pandas
#python #pandas
Вопрос:
Мне нужна помощь в переформатировании моего вывода фрейма данных для цен закрытия акций.
В настоящее время мой вывод содержит стандартные символы в качестве заголовков, где я хотел бы, чтобы они отображались в строках. df_output = 1: https://i.stack.imgur.com/u4jEk.png
Я хотел бы, чтобы он отображался как показано ниже:
Это мой текущий код df_output (не уверен, что это причина):
prices_df = pd.DataFrame({
a: {x['formatted_date']: x['adjclose'] for x in data[a]['prices']} for a in assets})
ПОЛНЫЙ КОД:
import pandas as pd
import numpy as np
import yfinance as yf
from yahoofinancials import YahooFinancials
from datetime import datetime
import time
start_time = time.time()
df = pd.read_excel(r'C:UsersRyanDesktopStock Portfolio\My Portfolio.xlsx', sheet_name=0, skiprows=2)
list1 = list(df['Stock Code'])
assets = list1
yahoo_financials = YahooFinancials(assets)
data = yahoo_financials.get_historical_price_data(start_date=str(datetime.now().date().replace(month=1, day=1)),
end_date=str(datetime.now().date().replace(month=12, day=31)),
time_interval='daily')
prices_df = pd.DataFrame({
a: {x['formatted_date']: x['adjclose'] for x in data[a]['prices']} for a in assets})
Комментарии:
1. вы заглянули в
stack()
/unstack()
? очень сложно воспроизвести ваш случай без доступа к вашему Excel …. включите подмножествоlist1
2. Я сейчас не за компьютером, но я считаю, что
prices_df.stack()
(как сказал Роб) должно сработать.
Ответ №1:
Проверьте функции pandas, такие какhttps://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.wide_to_long.html и https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas .DataFrame.pivot_table.html для операций преобразования между длинным и широким форматами.
Ответ №2:
Попробуйте это:
prices_df.rename_axis('Date').reset_index().melt('Date', var_name='Symbol', value_name='Price')
Вывод:
Date Symbol Price
0 2020-01-02 FB 209.779999
1 2020-01-03 FB 208.669998
2 2020-01-06 FB 212.600006
3 2020-01-07 FB 213.059998
4 2020-01-08 FB 215.220001
.. ... ... ...
973 2020-08-18 CDNS 109.150002
974 2020-08-19 CDNS 108.529999
975 2020-08-20 CDNS 111.260002
976 2020-08-21 CDNS 110.570000
977 2020-08-24 CDNS 111.260002
[978 rows x 3 columns]
Комментарии:
1. Куда мне ввести эту строку? По-прежнему выдается ошибка
2. В самом конце вашего кода. Вам нужно будет переназначить это в новую переменную. Какую ошибку вы получаете?