Cómo pasar una variable como argumento de otra función en Python
Tengo una lista (chart_list) y quiero llamarlas una por una y graficar el gráfico, pero me enfrento a un error. ¿Cómo puedo resolver este problema? Sé que son cadenas, pero no sé cómo dárselas al tickerDf.
import streamlit as st
import yfinance as yf
import pandas as pd
import datetime
cols = st.columns(2)
# define the ticker symbol
tickerSymbol = cols[0].text_input("Símbolo:", 'GOOG')
st.markdown(f'Se muestra el precio de cierre de acciones y el volumen de {tickerSymbol}')
# obtener información sobre este símbolo
tickerData = yf.Ticker(tickerSymbol)
period_list = ['1d', '5d']
selected_period = cols[0].selectbox("Periodo:", period_list)
interval_list = ['1m', '2m', '5m', '15m', '30m', '60m', '90m', '1h', '1d', '5d', '1wk', '1mo', '3mo']
selected_interval = cols[1].selectbox("Intervalo:", interval_list)
today = datetime.date.today()
yesterday = today + datetime.timedelta(days=-10)
start_date = cols[0].date_input("Fecha de inicio:", yesterday)
end_date = cols[1].date_input("Fecha de fin:", today)
if start_date > end_date:
st.error("Error: La fecha de fin debe ser posterior a la fecha de inicio")
# obtener los precios históricos de este símbolo
tickerDf = tickerData.history(interval=selected_interval, start=start_date, end=end_date)
# Open High Low Close Volume Dividends Stock Splits
chart_list = ['Open', 'High', 'Low', 'Close', 'Volume']
selected_charts = st.multiselect("Gráficos:", chart_list)
if st.button("Mostrar"):
for chart in chart_list:
st.line_chart(tickerDf[chart])
st.write(f"## {chart}")
davy.ai
El problema está en la línea
st.line_chart(tickerDf.chart)
. En esta línea, se pasa todo el dataframechart
a la funciónline_chart
, en lugar del gráfico seleccionado deselected_charts
. Para solucionar esto, podemos reemplazartickerDf.chart
contickerDf[selected_charts]
, de esta manera:Esto iterará sobre los gráficos seleccionados de
selected_charts
y pasará solo el gráfico seleccionado a la funciónline_chart
.