Streamlit中DataFrame可点击链接修复及可排序表格实现
解决Streamlit中DataFrame链接跳转与表格排序问题
一、修复链接跳转错误
原代码的链接生成逻辑存在核心错误:拼接URL时误用了整个df['Symbol']列,导致生成的地址包含所有股票代码,无法定位到单个股票的图表页面。
修正后的链接生成逻辑:使用apply传入的当前行Symbol值(而非整列)拼接目标URL:
def make_clickable(symbol): # 若Symbol列包含逗号,取逗号前部分作为显示文本;无逗号则直接用原符号 display_text = symbol.split(',')[0] if ',' in symbol else symbol target_url = f"https://nepsealpha.com/trading/chart?symbol={symbol}" return f"<a target='_blank' href='{target_url}'>{display_text}</a>"
二、实现表格可排序
df.to_html生成的是静态HTML表格,原生不支持排序功能。Streamlit内置的st.dataframe组件自带排序、筛选、分页等交互能力,且能直接配置链接列,是更优的解决方案:
最终完整代码
import pandas as pd import streamlit as st df = pd.read_csv('data_file.csv') # 用st.dataframe的column_config直接定义链接列,同时保留表格排序功能 st.dataframe( df, column_config={ "Symbol": st.column_config.LinkColumn( "股票代码", help="点击查看对应股票图表", # 自定义显示文本(如果需要拆分逗号内容) display_text=lambda x: x.split(',')[0] if ',' in x else x, # 生成目标URL url=lambda x: f"https://nepsealpha.com/trading/chart?symbol={x}" ) }, hide_index=True, use_container_width=True )
关键说明
- 用
st.dataframe替代to_html渲染,无需手动处理HTML,原生支持排序交互 - 链接生成时严格基于当前行的Symbol值,确保跳转地址准确
内容的提问来源于stack exchange,提问作者dbmtbm
相关产品推荐
相关产品推荐

