假设我有一个这样的选择:
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)
这很容易;-)
解决方法
更新:最近的熊猫具有以下功能:read_sql_table和read_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')
table_name = 'my_prices' df = pd.read_sql_table(table_name,engine)
df = pd.read_sql_query("SELECT instrument,date FROM my_prices;",engine)
旧的答案引用了已被弃用的read_frame(请参阅该问题的version history).
首先阅读通常是有意义的,然后根据您的要求进行转换(因为这些通常在熊猫中是高效和可读的).在你的例子中,你可以pivot
的结果:
df.reset_index().pivot('date','instrument','price')
注意:您可能会错过reset_index,您不会在read_frame中指定index_col.