How to use DataFrame ?數組
簡介 分佈式數據集(經常使用於數據分析)建立 DataFrame查看與篩選數據:行列選取DataFrame 數據操做:增刪改
DataFrame 是 Python 中 Pandas 庫中的一種數據結構,是一種二維表。它相似 excel,或許說它可能有點像 matlab 的矩陣,可是 matlab 的矩陣只能放數值型值(固然 matlab 也能夠用 cell 存放多類型數據),DataFrame 的單元格能夠存放數值、字符串等,這就和 excel 表很像。app
同時 DataFrame 能夠設置列名 columns 與行名 index,能夠經過像 matlab 同樣經過位置獲取數據也能夠經過列名和行名定位。dom
版本聲明:Python 3.6.7函數
import pandas as pd import numpy as np # pandas 常與 numpy 一塊兒配合使用
若是還沒安裝直接在 cmd 裏 pip 安裝:spa
> pip install pandas > pip install numpy
一、直接建立excel
能夠直接使用 pandas 的 DataFrame 函數建立,好比隨機建立一個 4*4 的 DataFrame:code
np.random.randn(4,4):存放在DataFrame裏的數據blog
index=list('ABCD'):行名(或者能夠說是索引)
columns=list('ABCD'):列名
後兩個參數可使用 list 輸入,可是注意,這個list的長度要和 DataFrame 的大小匹配,否則會報錯。固然,這兩個參數是可選的,你能夠選擇不設置。並且發現,這兩個list是能夠同樣的,可是每行每列的名字在 index 或 columns 裏要是惟一的。
小數據量,手工鍵入數據:
df2 = pd.DataFrame([[1,2,3,4],[2,3,4,5], [3,4,5,6],[4,5,6,7]], index=(['r1','r2','r3','r4']), columns=(['c1','c2','c3','c4']))
二、使用字典建立
使用 DataFrame 方法,可是字典的每一個 key 的 value 表明一列,而 key 是這一列的列名:
一、查看列的數據類型:使用 dtypes 方法能夠查看各列的數據類型
二、查看DataFrame的頭尾
使用 head 能夠查看前幾行的數據,默認的是前5行,不過也能夠本身設置;
使用 tail 能夠查看後幾行的數據,默認也是5行,參數能夠本身設置;
三、查看行名與列名
使用 index 查看行名,columns 查看列名
In [6]: df3.dtypes Out[6]: name object age int64 gender object dtype: object In [7]: df3.head(1) Out[7]: name age gender 0 張三 18 男 In [8]: df3.tail(1) Out[8]: name age gender 2 王五 22 男 In [9]: df3.index Out[9]: RangeIndex(start=0, stop=3, step=1) In [10]: df3.columns Out[10]: Index(['name', 'age', 'gender'], dtype='object')
四、查看數據值
使用 values 能夠查看 DataFrame 裏的數據值,返回的是一個數組:
# 查看全部的數據值
In [11]: df3.values Out[11]: array([['張三', 18, '男'], ['李四', 20, '女'], ['王五', 22, '男']], dtype=object) # 查看某一列全部的數據值
In [12]: df3['name'].values Out[12]: array(['張三', '李四', '王五'], dtype=object)
使用 loc 或者 iloc (切片)查看數據值,區別是 loc 是根據行名,iloc 是根據數字索引:
①loc:(location),works on labels in the index,只能使用字符型標籤來索引數據,不能使用數字來索引數據,不過有特殊狀況,當數據框dataframe的行標籤或者列標籤爲數字,loc就能夠來其來索引。
②iloc:(i=integer),works on the positions in the index (so it only takes integers),主要使用數字來索引數據,而不能使用字符型的標籤來索引數據。
In [13]: df3.loc[1] Out[13]: name 李四 age 20 gender 女 Name: 1, dtype: object In [14]: df3.iloc[1] Out[14]: name 李四 age 20 gender 女 Name: 1, dtype: object
五、查看行列數:使用 shape 查看行列數,注意:參數爲0 表示查看行數,參數爲1 表示查看列數。
import numpy as np import pandas as pd data = pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('wxyz')) data['w'] #選擇表格中的'w'列,使用類字典屬性,返回的是Series類型
data.w #選擇表格中的'w'列,使用點屬性,返回的是Series類型
data[['w']] #選擇表格中的'w'列,返回的是DataFrame屬性
data[['w','z']] #選擇表格中的'w'、'z'列
data[0:2] #返回第1行到第2行的全部行,前閉後開,包括前不包括後
data[1:2] #返回第2行,從0計,返回的是單行,經過有先後值的索引形式,
#若是採用data[1]則報錯
data.ix[1:2] #(deprecated)返回第2行的第三種方法,返回的是DataFrame,跟data[1:2]同
data['a':'b'] #利用index值進行切片,返回的是**前閉後閉**的DataFrame,
#即末端是包含的
data.irow(0) #(deprecated)取data的第一行
data.icol(0) #(deprecated)取data的第一列
data.head() #返回data的前幾行數據,默認爲前五行,須要前十行則dta.head(10)
data.tail() #返回data的後幾行數據,默認爲後五行,須要後十行則data.tail(10)
data.iloc[-1] #選取DataFrame最後一行,返回的是Series
data.iloc[-1:] #選取DataFrame最後一行,返回的是DataFrame
data.loc['a',['w','x']] #返回‘a’行'w'、'x'列,這種用於選取行索引列索引已知
data.iat[1,1] #選取第二行第二列,用於已知行、列位置的選取
一、轉置:直接字母T,這就有點 線性代數 的味道了哈
二、描述性統計
使用 describe 方法能夠對數據根據「列」進行描述性統計:
In [15]: df3.describe() Out[15]: age count 3.0 mean 20.0 std 2.0 min 18.0
25% 19.0
50% 20.0
75% 21.0 max 22.0
由上能夠看出,若是有的列是非數值型的,那麼就跳過不會進行統計;若是想對行進行描述性統計,能夠靈活處理一下:轉置後進行 describe。
三、計算
使用 sum 默認對每「列」求和,sum(1) 爲對每「行」求和:
In [16]: df3.sum() # 列求和
Out[16]: name 張三李四王五 # 若是元素是字符串,使用sum也會加起來(字符串拼接)
age 60 gender 男女男 dtype: object In [17]: df3.sum(1) # 行求和
Out[17]: 0 18 # 行中,若是有字符串有數值,則只計算數值
1 20
2 22 dtype: int64
數乘運算使用 apply(應用 lambda 實現):
In [18]: df2 Out[18]: c1 c2 c3 c4 r1 1 2 3 4 r2 2 3 4 5 r3 3 4 5 6 r4 4 5 6 7 In [19]: df2.apply(lambda x:x*2) Out[19]: c1 c2 c3 c4 r1 2 4 6 8 r2 4 6 8 10 r3 6 8 10 12 r4 8 10 12 14
若是元素是字符串,則會把字符串再重複一遍。
乘方運算跟 matlab 相似,直接使用兩個 *,乘方運算若是有元素是字符串的話,就會報錯。
In [36]: df2 Out[36]: c1 c2 c3 c4 r1 1 2 3 4 r2 2 3 4 5 r3 3 4 5 6 r4 4 5 6 7
# 1.增
In [37]: df2['c5'] = 8 # 建立新列並賦值(統一值)
In [38]: df2 Out[38]: c1 c2 c3 c4 c5 r1 1 2 3 4 8 r2 2 3 4 5 8 r3 3 4 5 6 8 r4 4 5 6 7 8 In [39]: df2.insert(0,'c0',[9, 9, 9, 9]) # 使用 insert 方法能夠指定把列插入到第幾列,其餘的列順延
In [40]: df2 Out[40]: c0 c1 c2 c3 c4 c5 r1 9 1 2 3 4 8 r2 9 2 3 4 5 8 r3 9 3 4 5 6 8 r4 9 4 5 6 7 8
# 2.刪
In [41]: del df2['c0'] In [42]: df2 Out[42]: c1 c2 c3 c4 c5 r1 1 2 3 4 8 r2 2 3 4 5 8 r3 3 4 5 6 8 r4 4 5 6 7 8 In [43]: df2.drop('c1',axis=1) # 使用 drop() 方法刪除
Out[43]: c2 c3 c4 c5 r1 2 3 4 8 r2 3 4 5 8 r3 4 5 6 8 r4 5 6 7 8 In [44]: df2 # 用 drop 刪除時,刪的是視圖,並無真正刪除
Out[44]: c1 c2 c3 c4 c5 r1 1 2 3 4 8 r2 2 3 4 5 8 r3 3 4 5 6 8 r4 4 5 6 7 8
# dorp()能夠經過axis(行:axis=0 ,列:axis=1)能夠控制刪除行或列,默認是行
# dorp()能夠同時刪除多行或多列,如 df2.drop(['c1','c2'], axis=1)
# 3.改
In [45]: df2['c5']['r3'] = 99 In [46]: df2 Out[46]: c1 c2 c3 c4 c5 r1 1 2 3 4 8 r2 2 3 4 5 8 r3 3 4 5 6 99 r4 4 5 6 7 8
五、合併拼接
使用 join 能夠將兩個 DataFrame 合併,但只根據行列名合併,而且以做用的那個 DataFrame 的爲基準。
可是,join 這個方法還有 how 這個參數能夠設置,合併兩個 DataFrame 的交集或並集。參數爲 'inner' 表示交集,'outer' 表示並集。
若是要合併多個 Dataframe,能夠用 list 把幾個 Dataframe 裝起來,而後使用 concat 轉化爲一個新的 Dataframe。