将 sql 选择解压缩到 pandas 数据框中

新手上路,请多包涵

假设我有一个大致像这样的选择:

 select instrument, price, date from my_prices;

如何将返回的价格解压缩到单个数据框中,其中包含每种工具的系列并按日期编制索引?

要明确:我正在寻找:

 <class 'pandas.core.frame.DataFrame'>
DatetimeIndex: ...
Data columns (total 2 columns):
inst_1    ...
inst_2    ...
dtypes: float64(1), object(1)

我不是在寻找:

 <class 'pandas.core.frame.DataFrame'>
DatetimeIndex: ...
Data columns (total 2 columns):
instrument    ...
price         ...
dtypes: float64(1), object(1)

…这很容易;-)

原文由 Chris Withers 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 730
2 个回答

更新:最近的熊猫有以下功能: read_sql_tableread_sql_query

首先创建一个db引擎(连接也可以在这里工作):

 from sqlalchemy import create_engine
# see sqlalchemy docs for how to write this url for your database type:
engine = create_engine('mysql://scott:tiger@localhost/foo')

请参阅 sqlalchemy 数据库网址

pandas_read_sql_table

 table_name = 'my_prices'
df = pd.read_sql_table(table_name, engine)

pandas_read_sql_query

 df = pd.read_sql_query("SELECT instrument, price, date FROM my_prices;", engine)


旧答案引用了已弃用的 read_frame(请参阅此问题的 版本历史 以获取该答案)。


首先阅读通常是有意义的, 然后 根据您的要求执行转换(因为这些在 pandas 中通常是高效且可读的)。在您的示例中,您可以 pivot 结果:

 df.reset_index().pivot('date', 'instrument', 'price')

注意:您可能会错过 reset_index 您没有在 index_col 中指定 read_frame

原文由 Andy Hayden 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以将游标对象传递给 DataFrame 构造函数。对于 postgres:

 import psycopg2
conn = psycopg2.connect("dbname='db' user='user' host='host' password='pass'")
cur = conn.cursor()
cur.execute("select instrument, price, date from my_prices")
df = DataFrame(cur.fetchall(), columns=['instrument', 'price', 'date'])

然后设置索引

df.set_index('date', drop=False)

或直接:

 df.index =  df['date']

原文由 jdennison 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题