標籤:

十分鐘入門pandas(上)【解讀pandas官方文檔】

前言

其實,學習Python很好的方法是去看官方文檔。

有人會說,我零基礎,看不懂啊!

也有人會說,我英語差,看不懂啊!!

還有人會說,我想學實戰案例,不想看的這麼詳細!!!

是的,官方文檔說的面面俱到,像是查字典似的,對於初學者是很不友善的

所以大部分人選擇了:拒絕!

其實,我以前也是不看官方文檔的,但有些問題百度不到,看的書里沒講到,那我就被迫去看官方文檔了

此舉給我打開了學習Python的一扇窗

我發現,官方文檔其實有很多例子和入門學習內容,比如我們今天要說的

十分鐘入門Pandas

很多人討厭看官方文檔,今天我就用中文簡單解讀一下,爭取讓大家看懂,能入門Pandas

官方文檔說想要詳細了解Pandas的更多用法可以看它的cookbook:pandas.pydata.org/panda

導入模塊

import pandas as pdnnimport numpy as npnnimport matplotlib.pyplot as pltn

這分別導入了pandas、numpy包 和 matplotlib 包中的 pyplot 模塊

創建對象

請參見「數據結構簡介」部分:pandas.pydata.org/panda

通過一個列表的值創建一個系列,讓pandas創建一個默認的整數索引:n

s = pd.Series([1,3,5,np.nan,6,8])nnsn

注意:np.nan表示不存在

通過numpy創建的數組,可以創建一個pandas中特有的dataframe,使用datetime作為索引和標記列名。

dates = pd.date_range(20130101, periods=6)nndatesn

這裡的date_range()是pandas下的一個方法,可以在jupyter notebook下使用如下方法查看使用說明:

?pd.date_range()n

我們可以看到這個方法的使用說明和各個參數的作用

看到這個方法是返回固定頻率日期時間索引,返回連續的六個日期信息

df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list(ABCD))ndfn

?np.random.randn()n

np.random.randn(6,4)是生成6行4列的標準正態分布數據

註:這裡使用ABCD為列標籤,之前生成的日期序列為行標籤,6行4列標準正態分布數據為內容的dataframe

使用字典來創建dataframe

df2 = pd.DataFrame({ A : 1.,n B : pd.Timestamp(20130102),n C : pd.Series(1,index=list(range(4)),dtype=float32),n D : np.array([3] * 4,dtype=int32),n E : pd.Categorical(["test","train","test","train"]),n F : foo })ndf2n

查看dataframe的類型信息

df2.dtypesn

查看數據

更多內容請參閱基礎部分:pandas.pydata.org/panda

查看dataframe頂部和底部的行(默認五行)

df.head()#查看默認前五行n

df.tail()#查看默認後五行n

df.head(3)#查看前三行n

顯示索引,列和底層numpy數據

顯示索引:

df.indexn

顯示列名:

df.columnsn

查看底層numpy數據:

df.valuesn

對數據的描述性統計信息

df.describe()n

注意:數據需要是數字類型(float,int等)

轉置調換數據

df.Tn

注意:就像線性代數裡面的轉置矩陣

按軸排序

df.sort_index(axis=1, ascending=False)n

可能你還看不太明白這是什麼方法

我們help一下

這說明axis可以取0或者1,我們試試看0:

df.sort_index(axis=0, ascending=False)n

可以看出兩者的區別

深入挖掘其中的參數作用還得你自己慢慢看呢

按值排序

df.sort_values(by=B)n

這是B列數據排序,並且其他數據參照B列數據變化。

選擇數據

更多內容請參閱索引文檔索引:pandas.pydata.org/panda

和選擇數據和多指標/高級索引:pandas.pydata.org/panda

選擇一個列,返回一個Series,相當於df.A

df[A] #取A列數據,返回的是一個序列n

選擇通過[],切片出行數據

df[0:3] #使用默認索引取出前三行n

df[20130102:20130104] #使用新索引取出對應行n

標籤選擇

在標籤選擇中查看更多內容:pandas.pydata.org/panda

使用標籤獲取一塊數據:

df.loc[dates[0]] #取出第一行n

通過標籤選擇多列:

df.loc[:,[A,B]] #這裡選擇的是A,B列數據n

顯示標籤切片:

df.loc[20130102:20130104,[A,B]]n

減少返回對象的維度:

df.loc[20130102,[A,B]]n

獲得標量值(就是定位一個具體的值):

df.loc[dates[0],A]n

快速訪問標量(等同於先前的方法):

df.at[dates[0],A]n

按位置選擇

更多按位置選擇內容:pandas.pydata.org/panda

通過傳遞的整數的位置進行選擇:

df.iloc[3] #取出第三行n

通過整數切片,類似於numpy / python:

df.iloc[3:5,0:2]n

切出3-4行,1-2列一塊區域

通過整數位置列表切分,類似numpy的/ Python的風格:

df.iloc[[1,2,4],[0,2]]n

切分出某些行:

df.iloc[1:3,:]n

切分出某些列:

df.iloc[:,1:3]n

獲取某個值

df.iloc[1,1]n

快速訪問某個值(等同於先前的方法):n

df.iat[1,1]n

布爾索引

使用單列值選擇數據

df[df.A > 0]n

注意:先判斷A欄中大於零的數,然後把這些行取出來

從滿足布爾條件的DataFrame中選擇值:

df[df > 0]n

註:顯示dataframe中大於零的數

使用isin()方法進行過濾:

df2 = df.copy()ndf2[E] = [one, one,two,three,four,three]ndf2n

註:copy了一份dataframe,然後新加了一列E

?df2.isin()n

從help文件可以知道isin()方法的作用是:

DataFrame顯示每個元素是否在DataFrame包含在值中,返回boolean.

df2[df2[E].isin([two,four])]n

相當於判斷two和four兩列是否在df2中,在的話返回True,然後將參數傳入df2,返回這兩列的值。

設置

置新的列會自動使索引對齊數據:

s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range(20130102, periods=6))ns1n

df[F] = s1ndfn

這裡用和原來一樣的索引(時間)為原來的dataframe增加了一列數據

通過使用numpy數組分配進行設置:n

df.loc[:,D] = np.array([5] * len(df))ndfn

註:產生一個數組,每個元素值為5,長度為df的行數,替換在原來df的D列

按位置設定值:n

df.iat[0,1] = 0ndfn

註:將第一行第二列的數值設定為0

設置操作:

df2 = df.copy()ndf2[df2 > 0] = -df2ndf2n

註:將df copy一份命名為df2,然後將df2中大於零的數加負號

作者:王大偉

文章來源:十分鐘入門pandas(上)【解讀pandas官方文檔】 - 天善智能:專註於商業智能BI和數據分析、大數據領域的垂直社區平台

推薦閱讀:

安卓運行Python的神器:QPython
python多進程為什麼一定要__name__="__main__"?
for循環在Python中是怎麼工作的

TAG:Python |