GWTC目录筛选无数据问题求助:Streamlit+Pandas代码排查
问题解决:GWTC目录数据加载异常及默认目录设置
问题根源
GWTC显示0条数据的核心问题是数据筛选逻辑错误:
- 原代码用
df['catalog.shortName'] == 'GWTC'筛选GWTC数据,但GWOSC公开数据里没有直接标记为GWTC的条目,所有GWTC体系事件都归类在带confident后缀的子目录(如GWTC-1-confident、GWTC-2.1-confident)中。 - 后续对已空的
event_df再执行str.contains('confident')过滤,自然无结果。 - 另外
count变量作用域错误,未选中目录时会触发报错。
修复后的完整代码
import streamlit as st import pandas as pd @st.cache_data def load_and_group_data(): df = pd.read_csv("https://gwosc.org/eventapi/csv/allevents/") catalogs = ['GWTC', 'GWTC-1-confident', 'GWTC-2', 'GWTC-2.1-confident', 'GWTC-3-confident', 'O3_Discovery_Papers'] grouped_data = {} for catalog in catalogs: if catalog == 'GWTC': # 匹配所有GWTC系列的confident子目录事件 event_data = df[df['catalog.shortName'].str.contains(r'GWTC-\d+(\.\d+)?-confident', regex=True)] else: # 其他目录保持精确匹配 event_data = df[(df['catalog.shortName'] == catalog)] grouped_data[catalog] = event_data return grouped_data grouped_data = load_and_group_data() # 设置GWTC为默认选中目录 selected_catalog = st.selectbox('选择目录', grouped_data.keys(), index=grouped_data.keys().index('GWTC')) if selected_catalog in grouped_data: event_df = grouped_data[selected_catalog] st.write(f"{selected_catalog} 目录数据:") st.write(event_df) # 修正作用域,仅在有效选中时计算事件数 count = event_df.commonName.unique().size st.write(f"事件总数: {count}")
关键修改点
- GWTC筛选逻辑修正:用正则表达式匹配所有GWTC体系下的confident子目录,确保获取全部约90条事件数据。
- 默认目录设置:通过
selectbox的index参数指定GWTC为默认选中项,启动时自动加载。 - 作用域修复:将
count的计算和输出移至有效选中判断块内,避免未选中时的变量未定义报错。
内容的提问来源于stack exchange,提问作者chris trejo
相关产品推荐
相关产品推荐

