
人生苦短,我用 Python
前文傳送門:
概覽
首先還是幾個官方鏈接放一下:
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
