pandas全稱及說明沒找到pandas縮寫的定義,我自己猜了一個(gè),應(yīng)該八九不離十吧。Python ANalysis DAta tookitS. pandas是一個(gè)開源的遵循BSD license的庫,支持高性能,易用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具。目前最新穩(wěn)定版本是v0.22.0(2017.12.29) 安裝方法conda install pandas 或者pip install pandas 如果下載比較慢,可以考慮直接下載安裝文件pandas-0.22.0-cp27-cp27mu-manylinux1_x86_64.whl 然后安裝sudo pip install wheel 之后, sudo pip install pandas-0.22.0-cp27-cp27mu-manylinux1_x86_64.whl 即可安裝完成。下面開始pandas之旅。 數(shù)據(jù)結(jié)構(gòu)介紹pandas中有兩類非常重要的數(shù)據(jù)結(jié)構(gòu),即序列series和數(shù)據(jù)框dataFrame。series類似于numpy中的一維數(shù)組,特別之處在于它可以通過索引標(biāo)簽的方式獲取數(shù)據(jù),還具有索引的自動(dòng)對齊功能;dataframe類似于numpy的二維數(shù)組,當(dāng)更加靈活。 首先把下列三個(gè)庫import進(jìn)去,如果出現(xiàn)問題,請根據(jù)提示安裝相應(yīng)模塊。例如python-tk等。 >>> import matplotlib.pyplot as plt >>> import pandas as pd >>> import numpy as np 先看series的創(chuàng)建和使用 >>> arr1=np.arange(10) >>> arr1 array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>> type(arr1) <type 'numpy.ndarray'> >>> s1=pd.Series(arr1) #通過傳入numpy的一維數(shù)組對象創(chuàng)建series >>> s1 #series的索引自動(dòng)從0開始。 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 dtype: int64 >>> type(s1) <class 'pandas.core.series.Series'> 另外還可以通過字典的方式創(chuàng)建series >>> dic1={'a':10,'b':20,'c':40} >>> dic1 {'a': 10, 'c': 40, 'b': 20} >>> type(dic1) <type 'dict'> >>> s2=pd.Series(dic1) >>> s2 #從這里看series與字典更接近,都有索引。 a 10 b 20 c 40 dtype: int64 我們來看一下series的索引具體是什么 >>> s1.index RangeIndex(start=0, stop=10, step=1) >>> s2.index Index([u'a', u'b', u'c'], dtype='object') 有了索引就可以通過索引訪問數(shù)據(jù)了。 >>> s1[3] 3 >>> s2['b'] 20 >>> s1[[1,3,5]] 1 1 3 3 5 5 dtype: int64 還有一種創(chuàng)建series的方法 >>> s5=pd.Series(np.array([10,15,20,30,55,80]),index=['a','b','c','d','e','f']) >>> s5 a 10 b 15 c 20 d 30 e 55 f 80 dtype: int64 >>> s6=pd.Series(np.array([12,11,13,15,14,16]), index=['a','c','g','b','d','f']) >>> s6 a 12 c 11 g 13 b 15 d 14 f 16 dtype: int64 此時(shí)s5和s6的索引不相同,把他們相加會(huì)出現(xiàn)什么情況呢? >>> s5 s6 #結(jié)果就是索引值對應(yīng)的數(shù)據(jù)相加,找不到對應(yīng)的索引值的就返回NaN。 a 22.0 b 30.0 c 31.0 d 44.0 e NaN f 96.0 g NaN dtype: float64 series比較好理解,因?yàn)樗且痪S的。那么數(shù)據(jù)框呢?它有行索引和列索引。 >>> arr2=np.array(np.arange(12)).reshape(4,3) >>> arr2 array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]) >>> df2=pd.DataFrame(arr2) >>> df2 #看df2的值時(shí),一定要注意,最上面一行時(shí)列索引,最左邊一列是行索引。 0 1 2 0 0 1 2 1 3 4 5 2 6 7 8 3 9 10 11 >>> 類似數(shù)據(jù)庫操作的功能pd.io.parsers.read_csv可以直接從csv文件中讀出內(nèi)容并組成一個(gè)DataFrame對象。我們假設(shè)有一個(gè)student.csv文件。
查詢數(shù)據(jù)的前5行或末尾5行
查詢指定的行
查詢指定的列
也可以通過ix索引標(biāo)簽查詢指定的列
查詢指定的行和列
以上是從行或列的角度查詢數(shù)據(jù)的子集,現(xiàn)在我們來看看如何通過布爾索引實(shí)現(xiàn)數(shù)據(jù)的子集查詢。 查詢所有女生的信息
查詢出所有12歲以上的女生信息
查詢出所有12歲以上的女生姓名、身高和體重
上面的查詢邏輯其實(shí)非常的簡單,需要注意的是,如果是多個(gè)條件的查詢,必須在&(且)或者|(或)的兩端條件用括號(hào)括起來。 大家體會(huì)一下,這些操作和數(shù)據(jù)庫的操作是不是很類似? 強(qiáng)大的統(tǒng)計(jì)功能另外pandas還提供了許多統(tǒng)計(jì)函數(shù):
在Excel中有一個(gè)非常強(qiáng)大的功能就是數(shù)據(jù)透視表,通過托拉拽的方式可以迅速的查看數(shù)據(jù)的聚合情況,這里的聚合可以是計(jì)數(shù)、求和、均值、標(biāo)準(zhǔn)差等。 pandas為我們提供了非常強(qiáng)大的函數(shù)pivot_table(),該函數(shù)就是實(shí)現(xiàn)數(shù)據(jù)透視表功能的。 pandas可以靈活的解決很多工作中的數(shù)據(jù)處理、統(tǒng)計(jì)分析等任務(wù)。更詳細(xì)的介紹,請自行搜索pandas官方網(wǎng)站。 |
|