Pandas處理MySQL資料

2021-10-08 06:39:07 字數 2279 閱讀 3638

我們將使用sakila資料庫,mysql的示例。

借助pyodbc庫(您也可以使用mysqldb庫),我們可以建立到資料庫的連線字串:

#connection to mysql server

import pyodbc

mydb = pyodbc.connect("driver=; server=localhost; port=3306;database=sakila; uid=root; password=12345;")

注意:要使用pyodbc庫,您需要為使用的資料庫系統安裝乙個有效的odbc聯結器。

我們可以做的整潔的事情之一是使用python格式化功能,通過提示使用者輸入使用者名稱和密碼來為連線字串提供引數-避免顯式輸入密碼:

user = input('provide user: \n')

pwd = input('provide password: \n')

mydb = pyodbc.connect("driver=; server=localhost; port=3306;database=sakila; uid=%s; password=%s;" % (user, pwd))

注意,user和pwd將如何替換連線字串中的%s,使其等效於第乙個示例。

要使用pyodbc查詢資料庫,只需建立乙個游標並執行所需的任何查詢。 在示例中,我們將從電影資料庫中選擇「標題和發行年份」(無需顯式資料庫名稱,因為我們在連線中僅與之連線):

cursor = mydb.cursor()

cursor.execute('select title, release_year from film')

在執行查詢之後,我們可以使用以下方法獲得結果:

cursor.fetchall()
但是有乙個警告,cursor.fetchall()返回python列表,而不是儲存**資料的最有效/使用者友好的方法。

#movie name and title returning from query list

[('academy dinosaur', 2006),

('ace goldfinger', 2006),

('adaptation holes', 2006),

('affair prejudice', 2006),

('african egg', 2006)]

我們可以使用以下命令將此物件轉換為pandas dataframe(df):

movies_release_year = pd.dataframe([tuple(t) for t in cursor.fetchall()])
如果檢查movies_release_year的dataframe,則該物件看起來很奇怪,因為它沒有有關該錶的列名或其他元資料。

幸運的是,pandas為我們提供了一種在基礎查詢中將sql表轉換為dataframes的巧妙方法-輸入pandas read_sql_query方法:

movies_release_year = pd.read_sql_query('select title, release_year from film', mydb)
如果您使用movies_release_year.columns和movies_release_year.index檢查movies_release_year的物件元資料,則會得到以下輸出:

#for columns

index(['title', 'release_year'], dtype='object')

#for row indexes

rangeindex(start=0, stop=1000, step=1)

現在,列名正確顯示,我們可以從物件資料框中使用movies_release_year [「 title」]或movies_release_year.title來呼叫它們。sql等效於「select title from film」,但是行索引有些麻煩,自然,我們的查詢沒有讀取「主鍵/索引」。 pandas dataframe索引函式類似於sql表索引,並且要顯式索引的列,我們可以簡單地將引數傳遞給read_sql_query:

movies_release_year = pd.read_sql_query('select film_id, title, release_year from film', mydb, index_col = 'title')
詳情參閱

pandas處理資料

pd.read csv path to file.txt header 0,names ab index 0 names columns這個可以不寫,制定索引列是第一列,這樣就沒有序號 np.tofile d python np.txt 類似於二維列表 充分利用map函式 df.a df.a.map...

pandas 資料處理

pandas中資料可以分為series,dataframe,panel分別表示一維至三維資料。其中在構造時,index表示行名,columns表示列名 構造方式 s pd.series data index index s pd series np random randn 5 index a b ...

Pandas 處理缺失資料

import numpy as np import pandas as pd from pandas import series,dataframes series a b np.nan,c d pd.isnull s 0 false 1 false 2 true 3 false 4 false d...