在 PostgreSQL `SELECT *` 进入 Pandas DataFrame 后,列名未显示为 st.dataframe
Column names not displayed with st.dataframe after PostgreSQL `SELECT *` into Pandas DataFrame
Python 3.8.10
streamlit==1.9.0
pandas==1.4.2
psycopg2-binary==2.9.3
使用以下代码将 Postgres table 直接加载到 Pandas DataFrame 中。
df = pd.DataFrame(run_query("SELECT * FROM schema.tablename;"))
用 streamlit.dataframe(df) or streamlit.write(df)
显示它会丢失列名。
为了捕获列名,我使用了这个 kluge。
# Initialize connection.
@st.experimental_singleton
def init_connection():
return psycopg2.connect(**st.secrets["postgresservername"])
conn = init_connection()
# Perform query.
@st.experimental_memo(ttl=600)
def run_query(query):
with conn.cursor() as cur:
cur.execute(query)
return cur.fetchall()
def load_table_as_dataframe(table):
# This is super klugy.
data = run_query("SELECT * FROM schema.{};".format(str(table)))
columns = run_query("SELECT *FROM information_schema.columns WHERE table_schema = 'schema' AND table_name = '{}';".format(str(table)))
# Fish out the actual column names
columns = [c[3] for c in columns]
df = pd. DataFrame(data, columns = columns)
return df
df = load_table_as_dataframe("tablename")
哪个有效...
是否有更好的方法将所需数据(和列名称)收集到 Postgres 和 Streamlit 中的 Pandas DataFrame 中?
正在使用...
df = pd.read_sql("SELECT * FROM schema.{};".format(str(table)), conn)
...解决了问题。 (谢谢@parfait)
Python 3.8.10
streamlit==1.9.0
pandas==1.4.2
psycopg2-binary==2.9.3
使用以下代码将 Postgres table 直接加载到 Pandas DataFrame 中。
df = pd.DataFrame(run_query("SELECT * FROM schema.tablename;"))
用 streamlit.dataframe(df) or streamlit.write(df)
显示它会丢失列名。
为了捕获列名,我使用了这个 kluge。
# Initialize connection.
@st.experimental_singleton
def init_connection():
return psycopg2.connect(**st.secrets["postgresservername"])
conn = init_connection()
# Perform query.
@st.experimental_memo(ttl=600)
def run_query(query):
with conn.cursor() as cur:
cur.execute(query)
return cur.fetchall()
def load_table_as_dataframe(table):
# This is super klugy.
data = run_query("SELECT * FROM schema.{};".format(str(table)))
columns = run_query("SELECT *FROM information_schema.columns WHERE table_schema = 'schema' AND table_name = '{}';".format(str(table)))
# Fish out the actual column names
columns = [c[3] for c in columns]
df = pd. DataFrame(data, columns = columns)
return df
df = load_table_as_dataframe("tablename")
哪个有效...
是否有更好的方法将所需数据(和列名称)收集到 Postgres 和 Streamlit 中的 Pandas DataFrame 中?
正在使用...
df = pd.read_sql("SELECT * FROM schema.{};".format(str(table)), conn)
...解决了问题。 (谢谢@parfait)