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=[0或1,預設0,0表示行,1表示列],inplace=[True或False,預設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次冪的商