1. 程式人生 > >pandas初級篇

pandas初級篇

pandas初級篇

1 pandas資料

panadas載入完成之後的資料型別為DataFrame,如果對DataFrame進行查詢後,其結果轉變為Serise型別

如果要求瞭解不深的話可以簡單的把DataFrame理解成為一個表格

Serise理解成為只有一列的表格

當我們利用pandas從資料庫,csv檔案等讀出來的資料都是DataFrame型別,如果對DataFrame進行查詢,只要查詢結果多餘1列,那麼查詢出來的型別就是DataFrame型別,如果是單列,則型別為Serise型別

2 DataFrame屬性和方法

import pandas as
pd data = pd.read_csv('./datas/train.csv')

這種資料結構就是二維表結構,當然這裡的二維說的是表,很多時候我們把表裡面的欄位也稱為維,這個維是在資料分析裡面說的,很多時候資料裡面每一個欄位就是一個屬性,或者說一個特徵,有時候也會看到某個物件存在N個維,這裡的維通通說的是欄位

要區分其實很容易,只需要記住在空間上說的維其實是隻座標軸,二維空間就x,y軸,表示平面,三維空間xyz軸,三個軸,表示立體,4維空間甚至更高的維,在我們現實生活中難以用影象來表示,只有通過數學方式進行表示,所以高緯空間通常都是偏向數學方向的表示

屬性

values index columns dtypes size ndim shape T

data.values

表示直接將資料轉變成為numpy的ndarray型別資料,只要經過這一步操作之後,返回的資料就可以直接使用numpy的方法進行各種變化

data.index

不要看到index就以為是把所有的列名列出來,實際上DataFrame存在兩個索引,行索引和列索引,可以想象成為就是二維資料表的行列索引,這裡的index打出來的是行,而且顯示的不是所有資料,現實的是一個統計結果,當然這是你沒有自定義行索引的情況

比如資料庫裡面的資料,行就表示每一條記錄,實際上我們這裡的行顯示的就像

RangeIndex(start=0, stop=891, step=
1)

這種結果,很好讀,從0開始到891結束,步長為1

data.columns

資料庫裡面col經常簡寫為列,很顯然這個查出來的就是列索引,對應到資料庫裡面就是欄位名

data.dtypes

表示查詢出所有列對應的資料型別,這裡一目瞭然,非常方便

data.size

這個查出來的結果為存在多少個元素,因為是二維表格,行乘以列就是元素總的個數

data.shape

很熟悉,這個就是指的形狀

data.ndim

這個是查詢維度,因為我們經常在資料或者excel,或者csv格式讀取出來的資料,這些通常都是二維表格,所以查詢出來是2,但是不排除後面對data進行處理過後,進行更高維度的拼接或者新增高維度索引,想象一下,既然列表裡面可以再放列表,那麼data中元素就只能是數值或者字串麼?

data.T

很像numpy中的ndarray.T一樣,對二維表進行轉置,將列變成行,行變成列

data.欄位名

這個有點像ORM模型的方式,很多時候欄位名實際上就是列名,也是列索引,如果不進行單獨配置的話是這樣,那麼直接.欄位名就可以查出這一列的資訊,查詢出來的結果是一列,既然是單獨一列,那麼它就是Series型別資料

3 增刪改查

這個好理解,直接就像使用字典一樣進行新增資料,但是需要注意的是這不是指定的新增某一個數據,當你選定了欄位名之後是對這個一列進行新增

data['new_data'] = data['Age']**2

新數列的組成可以直接用原來某一列的變化得到,也可以直接賦值,直接賦值之後這一列都是一個定值

刪除

在資料庫中刪除的關鍵字是drop

DataFrame.drop(labels='刪除的行或列', axis=[01,預設0,0表示行,1表示列],inplace=[TrueFalse,預設False,表示是否對原資料生效])

比如

data.drop(labes='new_data', axis=1, inplace=True)

把剛才新建的一列刪了,並且對原資料起效

copy_data = data.drop(labels=range(100,1,-1), axis=0, inplace=False)

這裡可以直接傳range這種迭代器,從100號刪到1號,當然也可以range(1,100)從1號刪到100號,注意到axis=0,實際上刪除的是行

查詢

查詢實際上使用頻率最高,上面類似字典那種查詢這裡就不再示範了

data[['Age','new_data']]

這種直接列出幾個列,需要注意的是,如果是多個列查詢出來同樣也是DataFrame型別,查出來具體的某一個列,其資料型別才會變成Series型別

不管是DataFrame型別還是Series型別,都支援切片操作

data[['Age','new_data']][-1::-1]

相當於倒序排列,這種方式很像查詢結果是一個list,然後直接切片操作

如果直接對資料進行花式切片也可以

data[:][:10]

對data資料切片,因為列的索引都是列名不是數字,所以列索引只能[:]來切,其實相當於沒有切,後面的[:10]從0開始取到9,總共10行資料

相當於

data[:10]

效果一樣的

當然在實際過程中,想檢視前10行和後10行資料經常使用的是

data.head(10)
data.tail(10)
data['Age'].head(10) # Series型別同樣適用

非常重要的也是經常使用的 loc iloc ix

其中loc和iloc的方式接近

DataFrame.loc[行索引條件, 列名稱]

DataFrame.iloc(行索引,列索引)

在一個二維表格中,相當於一個二維空間,如果我們知道了x座標和y座標就能夠在二維空間中進行精準定位

data.loc[(data.Age.isnull()), 'Sex']

首先data.Age已經查出了Age列的資料,之後isnull()的意思是對這一列資料中的每一行進行審查,如果存在值就是False,如果是空值就True,那麼經過data.Age.isnull()之後這個行索引條件就變成了一個行布林索引,之後再對’Sex’性別這一列進行查詢,凡是行條件為True的才被索引出來,這是對某列資料中的缺失資料進行其他列資料顯示的方式

loc的條件索引方式

data.loc[(data['Age'] > 18) & (data['Sex'] == 'male')]

使用邏輯& 表示and的意思,上面語句時查出年齡大於18, 並且性別為男的所有資料,這是一種篩選的方式

後面的列索引也可以進行多個列同列的方式

data.loc[(data.Age.isnull()), ['Sex', 'Name']]

顯示出性別和名字欄位,篩選條件為年齡為空

iloc直接跟的是索引

data.iloc[:,[1,2,3,4]]

查詢所有行,顯示第1,2,3,4列

iloc同樣可以進行條件篩選方式查詢,但是iloc不能接受條件的表示式,因為表示式通常是對某一列進行的,那麼一旦查詢的返回值是具體的列,就表示資料型別已經切換成了Series型別,iloc不能接受Serires型別,所以需要進行處理

data.iloc[(data['Age'] > 18).values, [1]]

年齡大於18歲的第一列資訊,注意到有一個.values,這種直接屬性將整個行索引條件變換成了ndarray型別

ix的使用

DataFrame.ix[行索引的條件,可以是名稱和位置 ,列索引的位置或名稱]

這種方法實質上執行的效率比loc和iloc要低,可讀性不高,通常能夠用ix辦到的都能用loc辦到,所以把loc擼通關基本不用看其他的了

修改

這個沒什麼好說的,字典怎麼改資料那麼DataFrame就怎麼改

data['Age'] = 0

把所有Age資訊都改為0

當然也可以進行loc查詢後更改,效果一樣,建議使用loc查詢後更改,這樣可以設定條件,不然都是直接整列改意義不大

4 資料統計分析

強大的資料統計分析方式,numpy中的很多方法在這裡都能找得到

兩個最常用的檢視資料資訊的方法

data.info() # 查詢每個列的資料型別以及非空的個數
data.describe() # 查詢出資料沒列的統計資訊,均值,方差,標準差,最大值,最小值等資訊

注意到data實際上是DataFrame型別,如果查詢的結果是某一個具體的列,那麼其型別是Series型別,Series型別是沒有info()方法的

Series型別提供了value_counts()方法查詢具體某一列的統計資訊

data.Age.value_counts()

統計結果為該列中,所有資料的頻次統計,比如如果100歲出現3次,結果中一定包含100 3

這種方法非常好用,針對離散型資料尤其如此,比如某個資料你拿到後,上萬條資料,其中某個欄位你發現其實離散值,但是具體存在幾個值你也不清楚,也許存在40個或者更多,不可能直接去一個個看,直接使用這個方法,返回的是一個列表,第一列是這些對應的值,第二列是這些值在資料中出現的次數,最後還統計了存在多少個值

min 最小值 max 最大值
mean 均值 ptp 極差
median 中位數 std 標準差
var 方差 cov 協方差
sem 標準誤差 mode 眾數
skew 樣本偏度 kurt 樣本峰度
quantile 四分位數 count 非空數
describe 描述統計 mad 平均絕對離差

都是些方法,解釋一些

mad表示樣本相對於均值的差值取絕對值並求和之後除以樣本個數,

skew表示:樣本三階中心矩除以樣本二階中心矩的3/2次冪的商