小白學 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