将列表 [adodbapi.apibase.SQLrow] 转换为 pd.DataFrame
Convert list[adodbapi.apibase.SQLrow] to pd.DataFrame
在 sql-server 连接器中,adodbapi
是唯一在我的环境中工作的连接器。
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
UID={2};PWD={3};".format(server,db,user,pwd))
cursor = conn.cursor()
query_list = [row for row in cursor]
type(query_list[0]) = adodbapi.apibase.SQLrow
如何将此列表转换为 pandas df?
谢谢
这可能有帮助:
将 pandas 导入为 pd
.......
ur_statements
.......
query_list = [row for row in cursor]
df = pd.DataFrame({'col':query_list })
print (df)
我是这样做的:
import adodbapi as ado
import numpy as np
import pandas as pd
def get_df(data):
ar = np.array(data.ado_results) # turn ado results into a numpy array
df = pd.DataFrame(ar).transpose() # create a dataframe from the array
df.columns = data.columnNames.keys() # set column names
return df
with ado.connect('yourconnectionstring') as con:
with con.cursor() as cur:
sql_str = 'yourquery'
cur.execute(sql_str)
data = cur.fetchall()
df = get_df(data)
考虑pandas'read_sql
直接查询数据库。目前,虽然您会收到错误消息:
KeyError: '_typ'
但是,由于 @TomAubrunner on this Github ticket 有一个有效的修复程序,它似乎是 adodbapi
中的一个错误。
- 查找
adodpapi
的位置:print(adodbapi.__file__)
- 打开文件夹中的脚本:
apibase.py
找到:return self._getValue(self.rows.columnNames[name.lower()])
并替换为下面的 try/execpt
块:
try:
return self._getValue(self.rows.columnNames[name.lower()])
except:
return False
完成后,只需 运行 就像任何 DB-API pandas 连接一样,即使使用 qmark 参数也是如此:
import pandas as pd
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
UID={2};PWD={3};".format(server,db,user,pwd))
# WITHOUT PARAMS
df = pd.read_sql("SELECT * FROM myTable", conn)
# WITH PARAMS
df = pd.read_sql("SELECT * FROM myTable WHERE [Col]= ?", conn, params=['myValue'])
conn.close()
在 sql-server 连接器中,adodbapi
是唯一在我的环境中工作的连接器。
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
UID={2};PWD={3};".format(server,db,user,pwd))
cursor = conn.cursor()
query_list = [row for row in cursor]
type(query_list[0]) = adodbapi.apibase.SQLrow
如何将此列表转换为 pandas df?
谢谢
这可能有帮助:
将 pandas 导入为 pd
.......
ur_statements
.......
query_list = [row for row in cursor]
df = pd.DataFrame({'col':query_list })
print (df)
我是这样做的:
import adodbapi as ado
import numpy as np
import pandas as pd
def get_df(data):
ar = np.array(data.ado_results) # turn ado results into a numpy array
df = pd.DataFrame(ar).transpose() # create a dataframe from the array
df.columns = data.columnNames.keys() # set column names
return df
with ado.connect('yourconnectionstring') as con:
with con.cursor() as cur:
sql_str = 'yourquery'
cur.execute(sql_str)
data = cur.fetchall()
df = get_df(data)
考虑pandas'read_sql
直接查询数据库。目前,虽然您会收到错误消息:
KeyError: '_typ'
但是,由于 @TomAubrunner on this Github ticket 有一个有效的修复程序,它似乎是 adodbapi
中的一个错误。
- 查找
adodpapi
的位置:print(adodbapi.__file__)
- 打开文件夹中的脚本:
apibase.py
找到:
return self._getValue(self.rows.columnNames[name.lower()])
并替换为下面的try/execpt
块:try: return self._getValue(self.rows.columnNames[name.lower()]) except: return False
完成后,只需 运行 就像任何 DB-API pandas 连接一样,即使使用 qmark 参数也是如此:
import pandas as pd
import adodbapi
conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \
UID={2};PWD={3};".format(server,db,user,pwd))
# WITHOUT PARAMS
df = pd.read_sql("SELECT * FROM myTable", conn)
# WITH PARAMS
df = pd.read_sql("SELECT * FROM myTable WHERE [Col]= ?", conn, params=['myValue'])
conn.close()