小编典典

将sql select拆包到pandas数据框中

sql

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

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)

…这很容易;-)


阅读 171

收藏
2021-04-15

共1个答案

小编典典

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

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

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数据库URL

[pandas_read_sql_table](http://pandas.pydata.org/pandas-

docs/stable/generated/pandas.read_sql_table.html#pandas.read_sql_table)

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

[pandas_read_sql_query](http://pandas.pydata.org/pandas-

docs/stable/generated/pandas.read_sql_query.html#pandas.read_sql_query)

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

旧答案引用了已弃用的read_frame(有关该答案,请参阅此问题的版本历史记录)。


首先阅读 然后
对您的要求进行转换通常是很有意义的(因为在熊猫中这些转换通常是高效且可读的)。在您的示例中,您可以pivot得到以下结果:

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

注意:如果reset_index您未在中指定index_col,则可能会错过read_frame

2021-04-15