1. 程式人生 > >小白學 Python 資料分析(2):Pandas (一)概述

小白學 Python 資料分析(2):Pandas (一)概述

人生苦短,我用 Python

前文傳送門:

小白學 Python 資料分析(1):資料分析基礎

概覽

首先還是幾個官方連結放一下:

Pandas 官網:https://pandas.pydata.org/

Pandas 中文網:https://www.pypandas.cn/

Pandas Github:https://github.com/pandas-dev/pandas

先介紹一下 Pandas ,在中文網上是這麼描述的:

Pandas 是 Python 的核心資料分析支援庫,提供了快速、靈活、明確的資料結構,旨在簡單、直觀地處理關係型、標記型資料。Pandas 的目標是成為 Python 資料分析實踐與實戰的必備高階工具,其長遠目標是成為最強大、最靈活、可以支援任何語言的開源資料分析工具。經過多年不懈的努力,Pandas 離這個目標已經越來越近了。

總結一下,就是 Python 資料分析離不開 Pandas , Pandas 已經上升成為 Python 的資料分析的支援庫了。

那麼 Pandas 所適用的資料型別如下:

  • 與 SQL 或 Excel 表類似的,含異構列的表格資料;
  • 有序和無序(非固定頻率)的時間序列資料;
  • 帶行列標籤的矩陣資料,包括同構或異構型資料;
  • 任意其它形式的觀測、統計資料集, 資料轉入 Pandas 資料結構時不必事先標記。

Pandas 有兩種常用的資料結構,一個是 Series (一維資料),另一個是 DataFrame (二維資料)。兩種資料結構足以處理金融、統計、社會科學、工程等領域裡的大多數典型用例。

那麼什麼是一維資料什麼是二維資料呢?

簡單理解下,如果我們有一個數組,如下:

[1, 2, 3, 4, 5]

這個陣列可以稱為一維資料。

那麼二維資料是多個一維資料組成了一個二維資料,比如多個一維陣列,如下:

[[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5],
[1, 2, 3, 4, 5]]

這種資料也可以稱之為表格資料,既然是表格資料,那麼就會有表頭,可以參考 Excel ,如果有資料庫使用經驗的同學可以直接參考資料庫中的表。

Pandas 是基於 Numpy 開發而成的,可以與其它第三方科學計算支援庫完美整合。

Pandas 的優勢如下:

  • 處理浮點與非浮點資料裡的缺失資料,表示為 NaN
  • 大小可變:插入或刪除 DataFrame 等多維物件的列;
  • 自動、顯式資料對齊:顯式地將物件與一組標籤對齊,也可以忽略標籤,在 Series、DataFrame 計算時自動與資料對齊;
  • 強大、靈活的分組(group by)功能:拆分-應用-組合資料集,聚合、轉換資料;
  • 把 Python 和 NumPy 資料結構裡不規則、不同索引的資料輕鬆地轉換為 DataFrame 物件;
  • 基於智慧標籤,對大型資料集進行切片、花式索引、子集分解等操作;
  • 直觀地合併(merge)、連線(join)資料集;
  • 靈活地重塑(reshape)、透視(pivot)資料集;
  • 軸支援結構化標籤:一個刻度支援多個標籤;
  • 成熟的 IO 工具:讀取文字檔案(CSV 等支援分隔符的檔案)、Excel 檔案、資料庫等來源的資料,利用超快的 HDF5 格式儲存 / 載入資料;
  • 時間序列:支援日期範圍生成、頻率轉換、移動視窗統計、移動視窗線性迴歸、日期位移等時間序列功能。

這些功能主要是為了解決其它程式語言、科研環境的痛點。處理資料一般分為幾個階段:資料整理與清洗、資料分析與建模、資料視覺化與製表,Pandas 是處理資料的理想工具。

其它說明:

  • Pandas 速度很快。Pandas 的很多底層演算法都用 Cython 優化過。然而,為了保持通用性,必然要犧牲一些效能,如果專注某一功能,完全可以開發出比 Pandas 更快的專用工具。
  • Pandas 是 statsmodels ( statsmodels 是 python 中處理統計學問題的重要模組)的依賴項,因此,Pandas 也是 Python 中統計計算生態系統的重要組成部分。
  • Pandas 已廣泛應用於金融領域。

什麼是 Cython ?

C 語言是編譯性語言,而 Python 則是解釋性語言,簡而言之,就是 Python 執行是逐行執行,不需要實現編譯,而 C 需要在執行前編譯。那麼,可想而知,如果執行前,需要事先編譯,那麼其實有一種「上帝視角」的感覺,自然可以做很多優化,讓程式碼執行的更快。而 Cython 的出現就是這個目的,讓 Python 也可以被編譯,然後執行。 Cython 是一種部分包含和改變 C 語言,以及完全包含 Python 語言的一個語言集合。 Cython 是用 Python 實現的一種語言,可以用來寫 Python 擴充套件,用它寫出來的庫都可以通過 import 來載入,效能上比 Python 的快。 Cython 裡可以載入 Python 擴充套件(比如 import math),也可以載入 C 的庫的標頭檔案(比如:cdef extern from “math.h”),另外也可以用它來寫 Python 程式碼。將關鍵部分重寫成 C 擴充套件模組。 Cython 中的強大之處在於可以把 Python 和 C 結合起來,它使得看起來像 Python 語言的 Cython 程式碼有著和 C 相似的執行速度。

Pandas 通過這種方式保持了自己的執行速度。

安裝

Pandas 的安裝比較簡單,使用一句命令,如下:

pip install Pandas

如果看到如下顯示證明安裝成功:

Looking in indexes: https://mirrors.aliyun.com/pypi/simple/
Collecting Pandas
  Downloading https://mirrors.aliyun.com/pypi/packages/02/d0/1e8e60e61e748338e3a40e42f5dfeee63ccdecfc4f0894122b890bfb009a/pandas-0.25.3-cp37-cp37m-win_amd64.whl (9.2MB)
     |████████████████████████████████| 9.2MB 6.4MB/s
Requirement already satisfied: pytz>=2017.2 in c:\users\inwsy\appdata\local\programs\python\python37\lib\site-packages (from Pandas) (2019.2)
Collecting python-dateutil>=2.6.1
  Downloading https://mirrors.aliyun.com/pypi/packages/d4/70/d60450c3dd48ef87586924207ae8907090de0b306af2bce5d134d78615cb/python_dateutil-2.8.1-py2.py3-none-any.whl (227kB)
     |████████████████████████████████| 235kB 6.4MB/s
Collecting numpy>=1.13.3
  Downloading https://mirrors.aliyun.com/pypi/packages/a9/38/f6d6d8635d496d6b4ed5d8ca4b9f193d0edc59999c3a63779cbc38aa650f/numpy-1.18.1-cp37-cp37m-win_amd64.whl (12.8MB)
     |████████████████████████████████| 12.8MB 6.4MB/s
Requirement already satisfied: six>=1.5 in c:\users\inwsy\appdata\roaming\python\python37\site-packages (from python-dateutil>=2.6.1->Pandas) (1.12.0)
Installing collected packages: python-dateutil, numpy, Pandas
Successfully installed Pandas-0.25.3 numpy-1.18.1 python-dateutil-2.8.1

從安裝的日誌中可以看到,這裡並是不只安裝 Pandas ,而是順帶安裝了 Numpy 和 Python-Dateutil ,因為這兩個庫是 Pandas 的依賴庫,實際上, Pandas 的依賴庫不止這兩個,官方推薦的依賴庫具體如下:

Package 最低支援版本
setuptools 24.2.0
NumPy 1.13.3
python-dateutil 2.6.1
pytz 2017.2

這裡要注意一點,官方強烈建議我們安裝這些庫,因為這些庫可以提高處理速度,尤其是在處理大型資料集時。

Pandas 還有許多可選的依賴庫,僅用於特定的方法。例如,pandas.read_hdf() 需要pytables包。 如果未安裝可選依賴項,則在呼叫需要該依賴項的方法時,pandas將引發ImportError

依賴名稱 最低版本 注意
BeautifulSoup4 4.6.0 HTML parser for read_html (see note)
Jinja2 Conditional formatting with DataFrame.style
PyQt4 Clipboard I/O
PyQt5 Clipboard I/O
PyTables 3.4.2 HDF5-based reading / writing
SQLAlchemy 1.1.4 SQL support for databases other than sqlite
SciPy 0.19.0 Miscellaneous statistical functions
XLsxWriter 0.9.8 Excel writing
blosc Compression for msgpack
fastparquet 0.2.1 Parquet reading / writing
gcsfs 0.2.2 Google Cloud Storage access
html5lib HTML parser for read_html (see note)
lxml 3.8.0 HTML parser for read_html (see note)
matplotlib 2.2.2 Visualization
openpyxl 2.4.8 Reading / writing for xlsx files
pandas-gbq 0.8.0 Google Big Query access
psycopg2 PostgreSQL engine for sqlalchemy
pyarrow 0.9.0 Parquet and feather reading / writing
pymysql 0.7.11 MySQL engine for sqlalchemy
pyreadstat SPSS files (.sav) reading
pytables 3.4.2 HDF5 reading / writing
qtpy Clipboard I/O
s3fs 0.0.8 Amazon S3 access
xarray 0.8.2 pandas-like API for N-dimensional data
xclip Clipboard I/O on linux
xlrd 1.1.0 Excel reading
xlwt 1.2.0 Excel writing
xsel Clipboard I/O on linux
zlib Compression for msgpack

參考

https://blog.csdn.net/mou_it/article/details/81876879

https://www.pypandas.cn/docs/installation.html

https://www.pypandas.cn/docs/getting_started/overview.h