You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将SQL股票价格表转换为按Symbol分列的Pandas DataFrame

实现方法:将股票SQL表转换为宽格式Pandas DataFrame

没问题,这是个很常见的数据宽表转换需求,我来一步步给你拆解实现步骤:

1. 先从SQL读取数据到Pandas

首先你需要把SQL表的数据加载到Pandas DataFrame里,这里推荐用SQLAlchemy配合pd.read_sql来实现,兼容性更好:

import pandas as pd
from sqlalchemy import create_engine

# 替换成你的数据库连接字符串(比如MySQL、PostgreSQL、SQLite等)
engine = create_engine('your_database_connection_string')
# 替换成你的表名
query = "SELECT Symbol, Date, Price FROM your_stock_table"
# 读取数据
raw_df = pd.read_sql(query, engine)

2. 转换为目标宽格式

核心是用Pandas的透视功能,分两种场景处理:

场景A:每个日期+股票代码的组合唯一

如果你的数据里,同一天同一支股票只有一条价格记录,直接用pivot方法即可:

# 生成透视表:Date作为行索引,Symbol作为列,Price作为值
pivoted_df = raw_df.pivot(index='Date', columns='Symbol', values='Price')

# 把列名改成「股票代码_price」的格式
pivoted_df.columns = [f"{symbol}_price" for symbol in pivoted_df.columns]

场景B:存在重复的日期+股票代码记录

如果同一天同一支股票有多条价格(比如日内多次交易),需要先做聚合处理,用pivot_table更稳妥,比如取当日最后一笔价格:

# 聚合重复记录,这里用lambda取最后一条的价格,你也可以换成mean()、max()等
pivoted_df = raw_df.pivot_table(
    index='Date',
    columns='Symbol',
    values='Price',
    aggfunc=lambda x: x.iloc[-1]
)

# 同样重命名列
pivoted_df.columns = [f"{symbol}_price" for symbol in pivoted_df.columns]

3. 可选:调整日期列的格式

如果你的Date列从SQL读出来不是datetime类型,建议先转换,避免排序或筛选出问题:

raw_df['Date'] = pd.to_datetime(raw_df['Date'])

如果不想把Date作为索引,而是作为普通列,可以重置索引:

pivoted_df = pivoted_df.reset_index()

最终你得到的pivoted_df就是你想要的结构:Date列(或索引)+ 每支股票对应的_price列。

内容的提问来源于stack exchange,提问作者tony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:34:30