es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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}")
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El problema está en la línea st.line_chart(tickerDf.chart). En esta línea, se pasa todo el dataframe chart a la función line_chart, en lugar del gráfico seleccionado de selected_charts. Para solucionar esto, podemos reemplazar tickerDf.chart con tickerDf[selected_charts], de esta manera:

    if st.button("Mostrar"):
        for chart in selected_charts:
            st.line_chart(tickerDf[chart])
            st.write(f"## {chart}")
    

    Esto iterará sobre los gráficos seleccionados de selected_charts y pasará solo el gráfico seleccionado a la función line_chart.

Comments are closed.