小白學 Python 數據分析(7):Pandas (六)數據導入

人生苦短,我用 Pythonpython

前文傳送門:mysql

小白學 Python 數據分析(1):數據分析基礎git

小白學 Python 數據分析(2):Pandas (一)概述github

小白學 Python 數據分析(3):Pandas (二)數據結構 Seriessql

小白學 Python 數據分析(4):Pandas (三)數據結構 DataFrame數據庫

小白學 Python 數據分析(5):Pandas (四)基礎操做(1)查看數據數組

小白學 Python 數據分析(6):Pandas (五)基礎操做(2)數據選擇數據結構

引言

前面幾篇咱們介紹了 Pandas 的一些基礎操做,有同窗在後臺給小編留言,純粹的介紹 API 太無聊了,那麼,小編這篇就來點有用的東西,但願你們能在之後的工做生活中都用得上。編碼

本篇主要介紹如何將數據導入 Pandas 進行一些簡單的操做。spa

操做的數據源嘛,就選擇小編對本身博客站數據的抓取,這裏小編將本身的博客數據導出成了兩種格式, 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 還會有 gbkgb2312 等等。

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

示例代碼-Gitee

若是個人文章對您有幫助,請掃碼關注下做者的公衆號:獲取最新干貨推送:)
相關文章
相關標籤/搜索