小白學 Python 資料分析(7):Pandas (六)資料匯入
人生苦短,我用 Python
前文傳送門:
小白學 Python 資料分析(1):資料分析基礎
小白學 Python 資料分析(2):Pandas (一)概述
小白學 Python 資料分析(3):Pandas (二)資料結構 Series
小白學 Python 資料分析(4):Pandas (三)資料結構 DataFrame
小白學 Python 資料分析(5):Pandas (四)基礎操作(1)檢視資料
小白學 Python 資料分析(6):Pandas (五)基礎操作(2)資料選擇
引言
前面幾篇我們介紹了 Pandas 的一些基礎操作,有同學在後臺給小編留言,純粹的介紹 API 太無聊了,那麼,小編這篇就來點有用的東西,希望大家能在以後的工作生活中都用得上。
本篇主要介紹如何將資料匯入 Pandas 進行一些簡單的操作。
操作的資料來源嘛,就選擇小編對自己部落格站資料的抓取,這裡小編將自己的部落格資料匯出成了兩種格式, Excel 和 CSV ,各位同學在平常的工作生活中能接觸的應該也是這兩種格式。
Excel 資料匯入
匯入 Excel 資料主要使用到的方法是 Pandas 中的 read_excel()
。
在進行匯入操作的時候,要注意檔案路徑,這裡的檔案路徑可以使用相對路徑也可以使用絕對路徑,但是不管哪種路徑最基本的是要寫對。
小編先使用相對路徑做個演示:
import pandas as pd df = pd.read_excel("result_data.xlsx") print(df) # 輸出內容 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
因為小編這裡的 Excel 就放在程式碼的同級目錄,所以直接寫檔名即可,接下來演示絕對路徑。
由於小編的作業系統是 Windows 的作業系統,檔案路徑預設是使用 \
,如 D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx
,我們在直接使用 Windows 的檔案路徑的時候需要在前面增加一個 r (轉義符)避免路徑中的 \
被轉義,如下:
import pandas as pd df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx") print(df) # 輸出內容 plantform read_num fans_num rank_num like_num create_date 0 cnblog 215 0 118 0 2019-11-23 23:00:10 1 juejin 177 0 -2 1 2019-11-23 23:00:03 2 csdn 1652 69 0 24 2019-11-23 23:00:02 3 cnblog 650 3 191 0 2019-11-22 23:00:15 4 juejin 272 3 -23 1 2019-11-22 23:00:02 .. ... ... ... ... ... ... 403 juejin 212 0 -1 2 2020-02-20 23:00:02 404 csdn 1602 1 0 1 2020-02-20 23:00:01 405 cnblog 19 0 41 0 2020-02-21 23:00:05 406 juejin 125 1 -4 0 2020-02-21 23:00:02 407 csdn 1475 8 0 3 2020-02-21 23:00:02 [408 rows x 6 columns]
當然,如果不想使用這個轉義符 r 也行,這樣需要修改下檔案的路徑,將所有的 \
變成 /
,這個規則適用於其他所有的檔案路徑操作,示例如下:
import pandas as pd
df = pd.read_excel("D:/Development/Projects/python-learning/python-data-analysis/pandas-demo/result_data.xlsx")
print(df)
# 輸出內容
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 2020-02-20 23:00:02
404 csdn 1602 1 0 1 2020-02-20 23:00:01
405 cnblog 19 0 41 0 2020-02-21 23:00:05
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
[408 rows x 6 columns]
出於使用簡單考慮,小編推薦直接在路徑前面加 r ,剩下的檔案路徑直接使用 CV 大法就好。
指定匯入 Sheet
我們在使用 Excel 匯入的時候,除了可以指定檔案路徑,還可以選擇匯入的 Sheet ,如果不知道 Sheet 是什麼的同學,建議出門左轉。
在設定 Sheet 的時候,我們使用引數 sheet_name
來完成,示例如下:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='result_data')
print(df)
# 輸出結果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 2020-02-20 23:00:02
404 csdn 1602 1 0 1 2020-02-20 23:00:01
405 cnblog 19 0 41 0 2020-02-21 23:00:05
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
[408 rows x 6 columns]
如果我們要使用一個完全不存在的 Sheet 名稱會發生什麼事情呢?例如我們將上面的 sheet_name
修改為 aaa
,來看下:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name='aaa')
print(df)
# 輸出結果
Traceback (most recent call last):
File "C:\Users\inwsy\AppData\Local\Programs\Python\Python37\lib\site-packages\xlrd\book.py", line 474, in sheet_by_name
sheetx = self._sheet_names.index(sheet_name)
ValueError: 'aaa' is not in list
During handling of the above exception, another exception occurred:
可以看到這裡丟擲了 ValueError 的異常,並且提示 aaa
不在列表中。
在指定 Sheet 名稱的時候除了可以使用 Sheet 的具體名稱,還可以使用 Sheet 的順序,需要注意這個順序開頭是從 0 開始的。
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0)
print(df)
# 輸出結果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 2020-02-20 23:00:02
404 csdn 1602 1 0 1 2020-02-20 23:00:01
405 cnblog 19 0 41 0 2020-02-21 23:00:05
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
[408 rows x 6 columns]
如果這裡指定的順序是一個不存在的順序,一樣會丟擲異常 IndexError
,這裡小編就不做演示了。
指定匯入行索引
我們在匯入檔案的時候,行索引預設是會使用從 0 開始的預設索引,如果對行索引有需求的話,可以使用 index_col
引數來設定行索引。
比如我們現在設定 create_date
這個引數作為行索引,注意引數起始從 0 開始:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, index_col=5)
print(df)
# 輸出結果
plantform read_num fans_num rank_num like_num
create_date
2019-11-23 23:00:10 cnblog 215 0 118 0
2019-11-23 23:00:03 juejin 177 0 -2 1
2019-11-23 23:00:02 csdn 1652 69 0 24
2019-11-22 23:00:15 cnblog 650 3 191 0
2019-11-22 23:00:02 juejin 272 3 -23 1
... ... ... ... ... ...
2020-02-20 23:00:02 juejin 212 0 -1 2
2020-02-20 23:00:01 csdn 1602 1 0 1
2020-02-21 23:00:05 cnblog 19 0 41 0
2020-02-21 23:00:02 juejin 125 1 -4 0
2020-02-21 23:00:02 csdn 1475 8 0 3
[408 rows x 5 columns]
指定匯入列索引
同行索引一樣,預設也是採用源資料的第一行作為列索引,同樣,我們可以通過 header
進行列索引的設定, header
的預設引數為 0 ,也就是第一行,自定義可以使用其他行,將行號作為引數傳入即可,我們演示一下使用第二行作為索引:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, header=1)
print(df)
# 輸出結果
cnblog 215 0 118 0.1 2019-11-23 23:00:10
0 juejin 177 0 -2 1 2019-11-23 23:00:03
1 csdn 1652 69 0 24 2019-11-23 23:00:02
2 cnblog 650 3 191 0 2019-11-22 23:00:15
3 juejin 272 3 -23 1 2019-11-22 23:00:02
4 csdn 2202 129 0 37 2019-11-22 23:00:01
.. ... ... ... ... ... ...
402 juejin 212 0 -1 2 2020-02-20 23:00:02
403 csdn 1602 1 0 1 2020-02-20 23:00:01
404 cnblog 19 0 41 0 2020-02-21 23:00:05
405 juejin 125 1 -4 0 2020-02-21 23:00:02
406 csdn 1475 8 0 3 2020-02-21 23:00:02
[407 rows x 6 columns]
指定匯入行數
有時候,如果我們只需要瞭解一下這個檔案中有些什麼資料,那麼我們就不需要匯入所有的資料,可以使用 nrows
來指定匯入的行數,這裡我們選擇匯入 Excel 的前 100 行:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, nrows=100)
print(df)
# 輸出結果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
95 csdn 1492 88 0 13 2019-10-23 23:51:37
96 cnblog 1338 2 219 0 2019-10-22 23:33:33
97 juejin 204 1 -6 6 2019-10-22 23:18:19
98 csdn 1064 61 7094 18 2019-10-22 23:18:08
99 cnblog -493 1 69 0 2019-10-21 22:38:32
[100 rows x 6 columns]
從結果的資料統計,可以看到我們成功的匯入了前 100 行的資料,雖然行索引只有 99 ,是因為麼我們 Excel 的頭也佔了一行。
指定匯入列
有時候,我們的 Excel 中的列太多了,而我們處理的資料又不需要那麼多列的時候,我們可以使用 usecols
來指定我們需要匯入的列:
import pandas as pd
df = pd.read_excel(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.xlsx", sheet_name=0, usecols=[0, 1, 2])
print(df)
# 輸出結果
plantform read_num fans_num
0 cnblog 215 0
1 juejin 177 0
2 csdn 1652 69
3 cnblog 650 3
4 juejin 272 3
.. ... ... ...
403 juejin 212 0
404 csdn 1602 1
405 cnblog 19 0
406 juejin 125 1
407 csdn 1475 8
[408 rows x 3 columns]
注意這裡的 usecols
的引數是一個數組,表示我們將要匯入的列。
CSV 資料匯入
前面我們介紹瞭如何匯入 Excel 的資料,我們接著介紹如何匯入 CSV 的資料,首先還是使用 read_csv
匯入 CSV 的檔案:
import pandas as pd
df = pd.read_csv(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.csv")
print(df)
# 輸出結果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 23/11/2019 23:00:10
1 juejin 177 0 -2 1 23/11/2019 23:00:03
2 csdn 1652 69 0 24 23/11/2019 23:00:02
3 cnblog 650 3 191 0 22/11/2019 23:00:15
4 juejin 272 3 -23 1 22/11/2019 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 20/2/2020 23:00:02
404 csdn 1602 1 0 1 20/2/2020 23:00:01
405 cnblog 19 0 41 0 21/2/2020 23:00:05
406 juejin 125 1 -4 0 21/2/2020 23:00:02
407 csdn 1475 8 0 3 21/2/2020 23:00:02
[408 rows x 6 columns]
可以看到,和上面的 Excel 匯入的資料保持一致,只是後面的時間日期型別格式化有點區別。
其餘的操作和上面介紹的 Excel 是一樣的,這裡就不一一列舉了,有一個需要注意的點是,編碼格式的指定,這時我們需要設定 encoding
引數,如果不做設定,那麼預設的指定格式是 utf-8
的,因為常用的格式除了 utf-8
還會有 gbk
、 gb2312
等等。
import pandas as pd
# 指定編碼格式
df = pd.read_csv(r"D:\Development\Projects\python-learning\python-data-analysis\pandas-demo\result_data.csv", encoding='utf-8')
print(df)
# 輸出結果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 23/11/2019 23:00:10
1 juejin 177 0 -2 1 23/11/2019 23:00:03
2 csdn 1652 69 0 24 23/11/2019 23:00:02
3 cnblog 650 3 191 0 22/11/2019 23:00:15
4 juejin 272 3 -23 1 22/11/2019 23:00:02
.. ... ... ... ... ... ...
403 juejin 212 0 -1 2 20/2/2020 23:00:02
404 csdn 1602 1 0 1 20/2/2020 23:00:01
405 cnblog 19 0 41 0 21/2/2020 23:00:05
406 juejin 125 1 -4 0 21/2/2020 23:00:02
407 csdn 1475 8 0 3 21/2/2020 23:00:02
[408 rows x 6 columns]
因為小編這裡的編碼格式是 utf-8
,所以這裡對編碼格式的設定是 encoding='utf-8'
。
匯入資料庫資料
資料庫有很多種,在連線資料庫的時候需要使用不同的驅動,因為小編這裡使用的 MySQL 資料庫,所以使用的驅動為 pymsql
,在使用的事情需要先建立資料庫連線。
import pymysql
con = pymysql.connect(host='',
port=,
user='',
password='',
db='',
charset='')
這裡的引數需要各位自行填寫,用來配置 MySQL 連線的引數。
配置好資料庫連線以後,我們使用的是 read_sql
這個方法直接執行 sql 語句獲取資料,完整的程式碼如下:
import pandas as pd
import pymysql
con = pymysql.connect(host='',
port=,
user='',
password='',
db='',
charset='')
sql = 'select * from result_data'
df = pd.read_sql(sql, con)
print(df)
# 輸出結果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
.. ... ... ... ... ... ...
406 juejin 125 1 -4 0 2020-02-21 23:00:02
407 csdn 1475 8 0 3 2020-02-21 23:00:02
408 cnblog 56 0 33 0 2020-02-22 23:00:06
409 juejin 83 0 -1 0 2020-02-22 23:00:02
410 csdn 2094 10 0 4 2020-02-22 23:00:02
[411 rows x 6 columns]
這裡的結果比前面的 Excel 多幾行是因為時間關係,Excel 匯出的時間稍微早了一點。
簡單使用
當我們獲取到資料以後,在來幾個我們前面介紹過的簡單操作。
使用 head
預覽前幾行資料:
print(df.head(5))
# 輸出結果
plantform read_num fans_num rank_num like_num create_date
0 cnblog 215 0 118 0 2019-11-23 23:00:10
1 juejin 177 0 -2 1 2019-11-23 23:00:03
2 csdn 1652 69 0 24 2019-11-23 23:00:02
3 cnblog 650 3 191 0 2019-11-22 23:00:15
4 juejin 272 3 -23 1 2019-11-22 23:00:02
獲取資料表的大小,這裡使用的是 shape
:
print(df.shape)
# 輸出結果
(411, 6)
獲取數值分佈,使用 describe()
:
print(df.describe())
# 輸出結果
read_num fans_num rank_num like_num
count 411.000000 411.000000 411.000000 411.000000
mean 521.199513 9.111922 234.632603 4.347932
std 2899.915738 19.021352 1437.427594 7.829470
min -54600.000000 -1.000000 -25.000000 0.000000
25% 83.500000 0.000000 -1.000000 0.000000
50% 288.000000 2.000000 0.000000 1.000000
75% 788.000000 7.000000 38.000000 5.000000
max 7083.000000 129.000000 21720.000000 57.000000
本次的分享先到這裡了,因為最近都沒寫原創,本篇內容稍微長了點,希望各位同學還是能耐著性子自己寫寫程式碼,文章中相關涉及到的檔案都上傳程式碼倉庫了,有需要的同學可以自行取用。
示例程式碼
老規矩,所有的示例程式碼都會上傳至程式碼管理倉庫 Github 和 Gitee 上,方便大家取用。
示例程式碼-Github
示例程式碼-Gi