Closed MarcSkovMadsen closed 1 week ago
I can see the app is using 'pandas==1.5.3'. When using that version locally I can reproduce the error.
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
import panel as pn
pn.extension('plotly', 'tabulator')
ACCENT = "#BB2649"
RED = "#D94467"
GREEN = "#5AD534"
LINK_SVG = """
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-arrow-up-right-square" viewBox="0 0 16 16">
<path fill-rule="evenodd" d="M15 2a1 1 0 0 0-1-1H2a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1V2zM0 2a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2H2a2 2 0 0 1-2-2V2zm5.854 8.803a.5.5 0 1 1-.708-.707L9.243 6H6.475a.5.5 0 1 1 0-1h3.975a.5.5 0 0 1 .5.5v3.975a.5.5 0 1 1-1 0V6.707l-4.096 4.096z"/>
</svg>
"""
CSV_URL = "https://datasets.holoviz.org/equities/v1/equities.csv"
EQUITIES = {
"AAPL": "Apple",
"MSFT": "Microsoft",
"AMZN": "Amazon",
"GOOGL": "Alphabet",
"TSLA": "Tesla",
"BRK-B": "Berkshire Hathaway",
"UNH": "United Health Group",
"JNJ": "Johnson & Johnson",
}
EQUITY_LIST = tuple(EQUITIES.keys())
@pn.cache(ttl=600)
def get_historical_data(tickers=EQUITY_LIST, period="2y"):
"""Downloads the historical data from Yahoo Finance"""
df = pd.read_csv(CSV_URL, index_col=[0, 1], parse_dates=['Date'])
return df
historical_data = get_historical_data()
historical_data.head(3).round(2)
def last_close(ticker, data=historical_data):
"""Returns the last close pricefor the given ticker"""
return data.loc[ticker]["Close"].iloc[-1]
last_close("AAPL")
summary_data_dict = {
"ticker": EQUITY_LIST,
"company": EQUITIES.values(),
"info": [
f"""<a href='https://finance.yahoo.com/quote/{ticker}' target='_blank'>
<div title='Open in Yahoo'>{LINK_SVG}</div></a>"""
for ticker in EQUITIES
],
"quantity": [75, 40, 100, 50, 40, 60, 20, 40],
"price": [last_close(ticker) for ticker in EQUITIES],
"value": None,
"action": ["buy", "sell", "hold", "hold", "hold", "hold", "hold", "hold"],
"notes": ["" for i in range(8)],
}
summary_data = pd.DataFrame(summary_data_dict)
def get_value_series(data=summary_data):
"""Returns the quantity * price series"""
return data["quantity"] * data["price"]
summary_data["value"] = get_value_series()
summary_data.head(2)
titles = {
"ticker": "Stock Ticker",
"company": "Company",
"info": "Info",
"quantity": "Shares",
"price": "Last Close Price",
"value": "Market Value",
"action": "Action",
"notes": "Notes",
}
frozen_columns = ["ticker", "company"]
editors = {
"ticker": None,
"company": None,
"quantity": {"type": "number", "min": 0, "step": 1},
"price": None,
"value": None,
"action": {
"type": "list",
"values": {"buy": "buy", "sell": "sell", "hold": "hold"},
},
"notes": {
"type": "textarea",
"elementAttributes": {"maxlength": "100"},
"selectContents": True,
"verticalNavigation": "editor",
"shiftEnterSubmit": True,
},
"info": None,
}
widths = {"notes": 400}
formatters = {
"price": {"type": "money", "decimal": ".", "thousand": ",", "precision": 2},
"value": {"type": "money", "decimal": ".", "thousand": ",", "precision": 0},
"info": {"type": "html", "field": "html"},
}
text_align = {
"price": "right",
"value": "right",
"action": "center",
"info": "center",
}
base_configuration = {
"clipboard": "copy"
}
summary_table = pn.widgets.Tabulator(
summary_data,
editors=editors,
formatters=formatters,
frozen_columns=frozen_columns,
layout="fit_data_table",
selectable=1,
show_index=False,
text_align=text_align,
titles=titles,
widths=widths,
configuration=base_configuration,
)
summary_table
def style_of_action_cell(value, colors={'buy': GREEN, 'sell': RED}):
"""Returns the css to apply to an 'action' cell depending on the val"""
return f'color: {colors[value]}' if value in colors else ''
summary_table.style.map(style_of_action_cell, subset=["action"]).set_properties(
**{"background-color": "#444"}, subset=["quantity"]
)
If I upgrade locally to a more recent version (like 2.2.2) it works.
How do we force micropip to resolve to a more recent version of Pandas @philippjfr ?
Probably just need to bump the pyodide version in panel.io.convert
and the new pyodide distribution likely contains a more recent version.
Oh I see, the doc build is using that old version, unclear to me why that's the case.
See https://panel.holoviz.org/gallery/portfolio_analyzer.html