Pandas是Python處理數(shù)據(jù)分析包。當(dāng)需要處理大量數(shù)據(jù)時(shí)能比EXCEL提供更強(qiáng)大的運(yùn)行效率厘线∈锻龋可以與讀入,寫出如:CSV造壮,CST渡讼,Excel,MySQL等數(shù)據(jù)存儲(chǔ)方式耳璧。
任務(wù):
本次將要介紹的是如何利用Pandas以及一些輔助包來:
1. 將Python中的DataFrame數(shù)據(jù)寫入MySQL
2. 將MySQL中的數(shù)據(jù)導(dǎo)入Pyhon硝全,并且利用MySQL語句進(jìn)行操作
準(zhǔn)備:
利用到的模擬數(shù)據(jù)來自Stackoverflow 中的Stack Overflow Annual Developer Survey 2020 (CSV File)(https://insights.stackoverflow.com/survey)關(guān)于程序員的調(diào)查數(shù)據(jù)
在操作之前確保已經(jīng)安裝相應(yīng)的庫:Pandas,SQLAlchemy楞抡,pymysql
用到的工具:Anaconda伟众,JupyterNotebook(IDLE 或 Pycharm也可,但Jupyter的數(shù)據(jù)界面比較清晰)召廷,MySQL Workbench(8.0版本)凳厢。
方法如下(假設(shè)已經(jīng)安裝Anaconda):搜索Anaconda Prompt
pip install PyMySQL
pip install Pandas
pip install SQLAlchemy
操作階段
1. 導(dǎo)入數(shù)據(jù)到Jupyter
將下載的CSV導(dǎo)入Jupyter账胧,操作如下
2. 提前設(shè)置好Mysql
在Mysql中建立新的數(shù)據(jù)庫(Schema)命名為sample_db
3. 創(chuàng)立連接
首先import sqlalchemy 和 pymysql庫
create_engine 為一個(gè)方法(method),執(zhí)行建立連接的操作
engine變量儲(chǔ)存所創(chuàng)立的連接先紫,以便重復(fù)利用
df.to_sql() 為寫入sql的一個(gè)方法(method)治泥,其中arg1 為數(shù)據(jù)庫中數(shù)據(jù)表的名稱(此時(shí)新建的),engine 代表前期利用create_engine創(chuàng)建的連接遮精。if_exists 檢查是否之前已經(jīng)存在此數(shù)據(jù)表居夹,‘a(chǎn)ppend’代表如果存在附加,‘replace’代表如果存在本冲,覆蓋原來數(shù)據(jù)准脂。
操作完畢,登錄數(shù)據(jù)庫檬洞,此時(shí)在數(shù)據(jù)庫(sample_db)中將能看到新創(chuàng)建的數(shù)據(jù)表(sample_table)
4. 讀取數(shù)據(jù)庫中的數(shù)據(jù)
還是利用第三步創(chuàng)立的連接engine狸膏,在Jupyter中接著輸入
sql_df_test = pd.read_sql('sample_table',engine,index_col = 'Respondent')
將sample_table 中的數(shù)據(jù)導(dǎo)入并且賦值給sql_df_test
5. 利用Python操作查詢導(dǎo)入想要的數(shù)據(jù)
如果不想全部導(dǎo)入數(shù)據(jù)庫中的數(shù)據(jù),可以設(shè)置查詢條件添怔,只導(dǎo)入需要的數(shù)據(jù)湾戳。此時(shí)用到的語句為
pd.read_sql_query (query 代表查詢),arg1 為查詢的條件(SQL語法),代表從sample_table中以age>30 為條件广料,* 代表查詢所有的數(shù)據(jù)砾脑。
驗(yàn)證sql_df_test['Age'].min() 為31
6. Pandas語句查詢與Mysql語句查詢對(duì)比
假設(shè)想查詢模擬數(shù)據(jù)中,參與調(diào)查的中國程序員的平均年齡艾杏。
利用pandas語句
利用mysql語句(生成DataFrame格式韧衣,方便在Pandas中做進(jìn)一步操作)
利用mysql語句(簡單的結(jié)果輸出)