如何在Streamlit的.secrets.toml中配置多个Google Sheets工作表并实现多表数据聚合
如何在Streamlit的.secrets.toml中配置多个Google Sheets工作表并实现多表数据聚合
嘿,我来帮你搞定多表聚合的问题!官方文档只覆盖了单Google Sheet的情况,但其实只要稍微调整配置和代码,就能轻松实现多表数据的聚合,下面一步步来操作:
1. 调整.secrets.toml的配置
你需要在.streamlit/secrets.toml文件里,为每个要聚合的Google Sheet单独配置一个连接项,每个项用唯一的名称区分,这样Streamlit才能识别不同的表。示例配置如下:
[connections.gsheets_sheet1] spreadsheet = "https://docs.google.com/spreadsheets/d/xxxxxxx/edit#gid=0" [connections.gsheets_sheet2] spreadsheet = "https://docs.google.com/spreadsheets/d/yyyyyyy/edit#gid=0" # 要是还有更多表,继续添加就行,只要连接名不重复 [connections.gsheets_sheet3] spreadsheet = "https://docs.google.com/spreadsheets/d/zzzzzzz/edit#gid=0"
小提示:连接名(比如gsheets_sheet1)可以改成更贴合你业务的名称,比如customer_data、sales_records,这样后续代码里更容易区分。
2. 修改Streamlit代码实现多表读取与聚合
接下来在你的streamlit_app.py里,为每个配置好的连接创建对应的GSheetsConnection实例,读取每个表的数据,最后根据你的需求把数据聚合起来(比如行拼接、列关联等)。示例代码如下:
import streamlit as st from streamlit_gsheets import GSheetsConnection import pandas as pd # 为每个工作表创建独立的连接 conn_customer = st.connection("gsheets_sheet1", type=GSheetsConnection) conn_sales = st.connection("gsheets_sheet2", type=GSheetsConnection) conn_inventory = st.connection("gsheets_sheet3", type=GSheetsConnection) # 读取每个表的DataFrame df_customer = conn_customer.read() df_sales = conn_sales.read() df_inventory = conn_inventory.read() # 数据聚合示例 - 如果表结构相同,用行拼接 # 如果表结构不同,可以用pd.merge()根据共同字段(比如ID、日期)关联 aggregated_df = pd.concat([df_customer, df_sales, df_inventory], ignore_index=True) # 展示聚合后的结果 st.subheader("聚合后的多表数据") st.dataframe(aggregated_df) # 也可以像你原来的代码那样遍历数据 st.subheader("遍历聚合数据示例") for row in aggregated_df.itertuples(): st.write(f"{row.name} has a :{row.pet}:")
注意:如果你的各个工作表结构不一样,一定要选择合适的聚合方式,比如用pd.merge()来关联共同的字段,而不是直接行拼接,避免数据混乱。
备注:内容来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

