pandas操作mysql從放棄到入門
目錄
- 什麼是pandas
- 一、如何讀取資料庫-read_sql
- 二、如何篩選資料
- 三、如何連表-merge
- 四、如何刪除一行或一列-drop
- 五、如何分組統計-groupyby
- 六、如何排序-sort_values/sort_index
- 七、如何重建索引-groupby(as_index=False)/reset_index
- 八、如何翻轉dataframe-T
- 九、如何重新命名列-rename
- 十、如何強制轉換型別-astype
- 十一、groupby只有一列時如何count-size
- 十二、如何操作時間-.dt.
- 十三、如何操作字串-.str.
- 十四、如何進行資料透視-pivot/pivot_table
- 十五、如何進行視覺化-plot
什麼是pandas
pandas 是基於NumPy 的一種工具,該工具是為了解決資料分析任務而建立的。
Pandas納入了大量庫和一些標準的資料模型,提供了大量能使我們快速便捷地處理資料的函式和方法。
主要包含兩種資料型別:Series和DataFrame
- Series可以理解為dict的升級版本,主陣列存放numpy資料型別,index資料存放索引
- DataFrame相當於多維的Series,有兩個索引陣列,分別是行索引和列索引,可以理解成Series組成的字典
相關幫助文件
- 十分鐘入門教程
- DataFrame文件
- Series文件
一、如何讀取資料庫-read_sql
示例程式碼如下
from sqlalchemy import create_engine import pandas as pd username = '使用者名稱' password = '密碼' host = '連線地址' db = '資料庫' port = 埠號 link = f'''mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset=utf8''' engine = create_engine(link, pool_recycle=3600)
核心方法read_sql
log:pd.DataFrame = pd.read_sql("SELECT * FROM log ORDER BY id DESC ",engine)
執行結果如下
二、如何篩選資料
- 篩選建立時間大於某個時間點的記錄
import datetime
log[log['create_time'] > '2020-01-15 16:14:22']
- 篩選指定列的DataFrame
直接傳遞陣列給給DataFrame
logs[['user_id','type']]
- 獲取一列Series
logs['type']
- iloc和loc
iloc[行,列]是根據行號和列號獲取,loc[行索引 ,列索引]是根據索引名獲取
三、如何連表-merge
現在我需要將user_id對應的使用者名稱找出來,示例程式碼如下
#查詢出所有的使用者,以便將log和users做join
users:pd.DataFrame=pd.read_sql("SELECT * FROM users",engine)
users
- users和log的欄位太多,先做一下篩選
log=log[['type','user_id','project_id','create_time']]
users=users[['id','username','real_name']]
執行join,使用merge方法,how指定左連,left_on指定左表使用的欄位, right_on指定右表使用的欄位
log.merge(users,how='left',left_on='user_id',right_on='id')
四、如何刪除一行或一列-drop
drop方法,axis為0代表行,1代表列
renameRes.drop('建立時間',axis=1)
五、如何分組統計-groupyby
dropRes.groupby(['type','real_name']).count()
六、如何排序-sort_values/sort_index
by指定欄位,ascending指定升序還是降序
log.sort_values(by='user_id',ascending=False)
七、如何重建索引-groupby(as_index=False)/reset_index
預設groupby後的結果是行索引是groupby的欄位
log.merge(users,how='left',left_on='user_id',right_on='id').groupby('type').count()
groupby指定引數as_index
log.merge(users,how='left',left_on='user_id',right_on='id').groupby('type',as_index=False).count()
另外,還可以count完後直接呼叫reset_index方法
log.merge(users,how='left',left_on='user_id',right_on='id').groupby('type').count().reset_index()
八、如何翻轉dataframe-T
log.T
九、如何重新命名列-rename
使用rename方法,傳遞一個字典即可,如下
pd.DataFrame = res[['type','username','real_name','create_time']].rename({'create_time':'建立時間'},axis=1)
十、如何強制轉換型別-astype
log['create_time'].astype(str)
十一、groupby只有一列時如何count-size
count是必須依賴其他列做統計的,當只有一列的時候如何還使用count,是看不出統計欄位的,正確的方法應該是使用size
test4=pd.read_sql("SELECT `type` FROM log LIMIT 100",engine)
test4.groupby('type').size()
十二、如何操作時間-.dt.
例如,要將create_time轉為YY-MM-DD格式,可以使用函式.dt.date
log['create_time'].dt.date
具體方法可以參考Series的API文件的Datetime操作
十三、如何操作字串-.str.
例如,轉為大寫
log['type'].str.upper()
具體方法可以參考Series的API文件的字串操作
十四、如何進行資料透視-pivot/pivot_table
簡單的理解就是一個更高階的groupby功能
df = pd.DataFrame({'foo': ['one', 'one', 'one', 'two', 'two',
'two'],
'bar': ['A', 'B', 'C', 'A', 'B', 'C'],
'baz': [1, 2, 3, 4, 5, 6],
'zoo': ['x', 'y', 'z', 'q', 'w', 't']})
df.pivot(index='foo', columns='bar', values='baz')
pivot_table支援分組後再聚合操作
df = pd.DataFrame({"A": ["foo", "foo", "foo", "foo", "foo",
"bar", "bar", "bar", "bar"],
"B": ["one", "one", "one", "two", "two",
"one", "one", "two", "two"],
"C": ["small", "large", "large", "small",
"small", "large", "small", "small",
"large"],
"D": [1, 2, 2, 3, 3, 4, 5, 6, 7],
"E": [2, 4, 5, 5, 6, 6, 8, 9, 9]}
)
根據ABC分組,計算D的值,AB為行索引,C為列索引再使用sum函式,如下
df.pivot_table(values='D', index=['A', 'B'], columns=['C'], aggfunc=np.sum, fill_value=0)
十五、如何進行視覺化-plot
一般使用matplotlib進行繪圖
例如,統計所有的操作日誌最多的前三個,繪製直方圖
先取出這些資料,如下
#獲取所有操作型別最多的10條資料
countRes=log.groupby('type',as_index=False).count().drop(['create_time','project_id'],axis=1).rename({'user_id':'count'},axis=1).sort_values(by='count',ascending=False).head(10)
為了讓圖是遞增的狀態,我們反轉一下
countRes=countRes.iloc[::-1]
再使用matplotlib繪製直方圖
import matplotlib.pyplot as plt
plt.barh(countRes['type'],countRes['count'])
相關推薦
pandas操作mysql從放棄到入門
目錄 什麼是pandas 一、如何讀取資料庫-read_sql 二、如何篩選資料 三、如何連表-merge 四、如何刪除一行或一列-drop 五、如何分組統計-groupyby
MySQL從入門到放棄第一章:初涉
初涉mysql 本系列將會從0開始學習Mysql,大部分是理論加部分例項 學習目錄 - mysql預設埠 3306 - mysql超級使用者 root - 建立資料庫 C
MySQL從入門到放棄第三章:約束
約束 學習目錄 - 約束保證資料的完整行和一致性 - 約束按資料列的數目劃分: - 表級約束 - 列級約束 - 約束按功能劃分: - NOT NUL
轉-Vue.js2.0從入門到放棄---入門實例(一)
命令行 今天 初始化 手動 pre ref cnpm 簡單介紹 收藏 http://blog.csdn.net/u013182762/article/details/53021374 標簽: Vue.jsVue.js 2.0Vue.js入門實例Vue.js 2.0教
MySQL基礎知識(MySQL從入門到精通觀後感)
alter mes times 值範圍 model 。。 字符編碼 不同的 精通 17/7/9 1.主從式架構(Client-server model)或客戶端-服務器(Client-Server)結構簡稱C/S結構,是一種網絡架構,通常在該網絡架構下軟件分為客戶端和服務器
vex 從放棄到入門
style detail one elf nts primitive spl color cnblogs 1.point 模式 int snpt = npoints(1); int spt_num = fit(ch("cur_pos"),0,1,0,snpt-1);
mysql 首次安裝後 簡單操作與語句 新手入門
首先cd到安裝目錄中bin路徑:這是我的安裝路徑以管理員身份開啟cmd(防止許可權不足)cd E:\>cd E:\mysql\mysql-5.5.40-winx64\bin 首次安裝需要輸入 mysqld.exe -install 啟動mysqlE:\mysql\mysql-5.5.40-
Linux C++操作mysql入門
一、初識與mysql相關的部分資料型別和api 1.1) MYSQL:該結構代表一個數據庫的連線控制代碼,一般我們都不去複製它 MYSQL_RES:查詢返回的結果集 &
LVS+Keepalived實現MySQL從庫讀操作負載均衡配置
password lob new 信息 如果 ldoc 負載均衡。 path ignore 轉載於osyunwei 說明: 操作系統:CentOS 5.X 64位 MySQL主服務器:192.168.21.126 MySQL從服務器:192.168.21.127,192.1
pandas操作Excel和MySql雜記
這篇部落格的內容是我這兩天利用pandas讀取excel和讀寫MySql時用到的一些函式功能。寫下來,免得以後再去百度上東找西找。 先說連線上mysql的問題吧,因為我是從琢磨這個問題開始的。首先,我用的是MySql8.0, Django2.0.6和Python3.6.4。本來打算用Djan
MySQL 從入門到不是怎麼精通
一、索引 B+ Tree 原理 1. 資料結構 B Tree 指的是 Balance Tree,也就是平衡樹。平衡樹是一顆查詢樹,並且所有葉子節點位於同一層。 B+ Tree 是基於 B Tree 和葉子節點順序訪問指標進行實現,它具有 B Tree 的平
MySQL從入門到上天(二、子查詢&多表查詢)
- 子查詢 DROP DATABASE mydb2; USE mydb1; CREATE TABLE emp( empno INT, en
MySql從一竅不通到入門(五)Sharding:分表、分庫、分片和分割槽
一、Sharding Sharding 是把資料庫橫向擴充套件(Scale Out)到多個物理節點上的一種有效的方式,其主要目的是為突破單節點資料庫伺服器的 I/O 能力限制,解決資料庫擴充套件性問題。Shard這個詞的意思是“碎片”。如果將一個數據庫當作一塊
查詢操作 -- Django從入門到精通系列教程
該系列教程繫個人原創,並完整發布在個人官網劉江的部落格和教程 所有轉載本文者,需在頂部顯著位置註明原作者及www.liujiangblog.com官網地址。 查詢操作是Django的ORM框架中最重要的內容之一。我們建立模型、儲存資料為的就是在需要的時候可以查詢得到資料。Django自動為所有的模型提供了一
【 專欄 】- Python 操作elastic從入門到精通
Python 操作elastic從入門到精通 在工作中,mongodb 的效能已經不能滿足業務需求,特別是需要構建搜尋推薦系統,對於很多用Python的同學,網上的Python操作elasticsearch的教程比較少,所以我我吧
mysql 資料庫快速入門 DML資料操作語言
目錄 DML:資料操作語言 檢視資料庫編碼 插入操作 更新操作 刪除操作 DML:資料操作語言 用來定義資料庫記錄(資料)DML是對表中的資料進行增、刪、改的操作。不要與DDL混淆了。 關鍵字:INSERT 、UPDATE、 DELETE 小知識:
mysql 資料庫快速入門 DDL:操作資料庫、表、列等
DDL:資料庫定義語言 用來定義資料庫物件:庫、表、列等。 使用的關鍵字:CREATE、 ALTER、 DROP 操作資料庫 建立資料庫 Create database mydb1; Create database mydb2 character set gbk; Creat
Vue.js2.0從入門到放棄---入門例項(三)
已經有幾周沒有更新部落格了,最近自己也在學習就沒有能及時抽身來寫部落格。 今天就來簡單說一下vue-resource,這是vue的一個與伺服器端通訊的HTTP外掛,用來從伺服器端請求資料。話不多說,直接上乾貨吧。 這裡PS一下,有人反映之前的程式碼下載下來,執行會報錯而
MySQL入門之C語言操作MySQL
基本概念 C APIs包含在mysqlclient庫檔案當中,與MySQL的原始碼一塊發行,用於連線到資料庫和執行資料庫查詢。 #include <stdio.h> #include <stdlib.h> #include &l
【QT】QT從零入門教程(五):影象檔案操作 [新建開啟儲存]
前文已經講解了選單欄、工具欄、工作列的實現方法,下面我們對程式進行完善。實現功能為:為軟體新增“檔案”選單,並在下拉列表上新增”新建”、 ”開啟”、 ”儲存”、 ”另存為”、 ”關閉”,並在工具欄加上“新建”、“開啟”、“儲存”圖示。 程式碼 /