Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将sql select解包到数据帧中_Python_Sql_Pandas - Fatal编程技术网

Python 将sql select解包到数据帧中

Python 将sql select解包到数据帧中,python,sql,pandas,Python,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: float6

假设我有一个大致如下的选择:

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)
我不是在寻找:

<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)

…这很容易-

您可以将游标对象传递给数据帧构造函数。对于博士后:

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']
更新:最近的熊猫有以下功能:读取sql表和读取sql查询

首先创建一个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')

旧答案引用了已弃用的read_框架,请参见此问题的第页以获取该答案

首先阅读,然后对您的需求执行转换通常是有意义的,因为这些转换在pandas中通常是高效和可读的。在您的示例中,您可以选择以下结果:

df.reset_index().pivot('date', 'instrument', 'price')
注意:如果在读取框中未指定索引列,则可能会错过重置索引

这将连接postgres和pandas与远程postgresql

这用于建立与postgres db的连接

这用于从postgres db读取表


哦,我喜欢捷径。我不知道这件事。你知道这是否适用于psycopg连接器吗?我认为应该适用,你只需使用它设置连接con,如果适用,请告诉我!:+我想知道这是否适合你。read\u frame/write\u frame的开发人员都不是普通的postgresql用户,所以我们没有介绍它。如果您遇到问题,请回答。是否已被pandas.io.sql.read\u sql取代?当尝试导入pandas>=0.18中的read\u frame时,我收到一个importError,而当前的文档提到read\u sql。@emunsing非常明确。还有一个是你最喜欢的。你试过阅读框架和心理学吗?任何关于这是否有效的反馈都会得到开发团队的高度赞赏。谢谢提取列名,以便columns=columns:columns=[elt[0]for elt in cur.description]这是我说的我没有明确寻找的东西,这里没有轴。我以这种方式动态检索列:df=pd.DataFramecur.fetchall,columns=[desc[0]for desc in cur.description]谢谢回答。有没有比手动键入列名更好的方法来填写列名?感谢您提供的这段代码片段,它可能会提供一些有限的、即时的帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在你的回答中添加一些解释,包括你所做的假设。这正是我在问题中明确说过我不想要的。是的……当然……因为我是python的初学者……我会在那里做更多的解释。。。
# CONNECT TO POSTGRES USING PANDAS
import psycopg2 as pg
import pandas.io.sql as psql
connection = pg.connect("host=192.168.0.1 dbname=db user=postgres")
dataframe = psql.read_sql("SELECT * FROM DB.Table", connection)
import pandas as pd
import pandas.io.sql as sqlio
import psycopg2

conn = psycopg2.connect("host='{}' port={} dbname='{}' user={} password={}".format(host, port, dbname, username, pwd))
sql = "select count(*) from table;"
dat = sqlio.read_sql_query(sql, conn)
conn = None
import pandas as pd

conn = psycopg2.connect("host='{}' port={} dbname='{}' user={} password={}".format(host, port, dbname, username, pwd))
sql = "select count(*) from table;"
dat = pd.read_sql_query(sql, conn)
conn = None