DataFrame是Python中Pandas庫中的一種數據結構,它相似excel,是一種二維表。python
或許說它可能有點像matlab的矩陣,可是matlab的矩陣只能放數值型值(固然matlab也能夠用cell存放多類型數據),DataFrame的單元格能夠存放數值、字符串等,這和excel表很像。shell
同時DataFrame能夠設置列名columns與行名index,能夠經過像matlab同樣經過位置獲取數據也能夠經過列名和行名定位,具體方法在後面細說。數組
首先聲明一下,如下都是使用的Python 3.6.5版本爲例,Python2應該也差很少吧(大概數據結構
在全部操做以前固然要先import必要的pandas庫,由於pandas常與numpy一塊兒配合使用,因此也一塊兒import吧。app
import pandas as pd import numpy as np
若是還沒安裝直接在cmd裏pip安裝吧,若是有版本選擇問題,參看以前的帖子。dom
pip install pandas pip install numpy
能夠直接使用pandas的DataFrame函數建立,好比接下來咱們隨機建立一個4*4的DataFrame。函數
df1=pd.DataFrame(np.random.randn(4,4),index=list('ABCD'),columns=list('ABCD'))
其中第一個參數是存放在DataFrame裏的數據,第二個參數index就是以前說的行名(或者應該叫索引?),第三個參數columns是以前說的列名。spa
後兩個參數可使用list輸入,可是注意,這個list的長度要和DataFrame的大小匹配,否則會報錯。固然,這兩個參數是可選的,你能夠選擇不設置。3d
並且發現,這兩個list是能夠同樣的,可是每行每列的名字在index或columns裏要是惟一的。excel
使用python本身的shell展現建立的結果是這樣的:
或者在jupyter裏面更酷點的樣子,接下來都使用jupyter輸出展現吧。
固然,若是你的數據量賊小,也能夠本身輸入建立,相似這樣。
df2=pd.DataFrame([[1,2,3,4],[2,3,4,5], [3,4,5,6],[4,5,6,7]], index=list('ABCD'),columns=list('ABCD'))
這樣也能夠獲得這樣子的DataFrame:
仍然是使用DataFrame這個函數,可是字典的每一個key的value表明一列,而key是這一列的列名。好比這樣。
dic1={'name':['小明','小紅','狗蛋','鐵柱'],'age':[17,20,5,40],'gender':['男','女','女','男']} df3=pd.DataFrame(dic1)
輸出結果是這樣的
python沒有matlab的工做區直接查看變量與內容,這大概是python科學計算的一個缺點。因此須要格外的代碼來查看,最基本的直接寫變量名與print就不說了。
使用dtypes方法能夠查看各列的數據類型,好比說剛剛的df3。
df3.dtypes
輸出的結果是這樣:
使用head能夠查看前幾行的數據,默認的是前5行,不過也能夠本身設置。
使用tail能夠查看後幾行的數據,默認也是5行,參數能夠本身設置。
好比隨意設置一個6*6的數據,只看前5行。
df4=pd.DataFrame(np.random.randn(6,6)) df4.head()
好比只看前3行。
df4.head(3)
好比看後5行。
df4.tail()
好比只看後2行。
df4.tail(2)
使用index查看行名,columns查看列名。具體由例子感覺吧。
查看行名。
df1.index
查看列名。
df3.columns
使用values能夠查看DataFrame裏的數據值,返回的是一個數組。
好比說查看全部的數據值。
df3.values
好比說查看某一列全部的數據值。
df3['name'].values
還有另外一種操做,使用loc或者iloc查看數據值(可是好像只能根據行來查看?)。區別是loc是根據行名,iloc是根據數字索引(也就是行號)。
好比說這樣。
df1.loc['A']
或者這樣。
df1.iloc[0]
按列進行索引查看數據還能直接使用列名,但這種方法對行索引不適用。
df3['name']
使用shape查看行列數,參數爲0表示查看行數,參數爲1表示查看列數。
df3.shape[0]
df3.shape[1]
DataFrame有些方法能夠直接進行數據統計,矩陣計算之類的基本操做。
直接字母T,線性代數上線。
好比說把以前的df2轉置一下。
df3.T
使用describe能夠對數據根據列進行描述性統計。
好比說對df1進行描述性統計。
df1.describe()
若是有的列是非數值型的,那麼就不會進行統計。
若是想對行進行描述性統計,請參看4.1(轉置後進行describe呀!)
使用sum默認對每列求和,sum(1)爲對每行求和。好比
df3.sum()
能夠發現就算元素是字符串,使用sum也會加起來。
df3.sum(1)
而一行中,有字符串有數值則只計算數值。
數乘運算使用apply,好比。
df2.apply(lambda x:x*2)
若是元素是字符串,則會把字符串再重複一遍。
乘方運算跟matlab相似,直接使用兩個*,好比。
df2**2
乘方運算若是有元素是字符串的話,就會報錯。
擴充列能夠直接像字典同樣,列名對應一個list,可是注意list的長度要跟index的長度一致。
df2['E']=['999','999','999','999'] df2
還能夠使用insert,使用這個方法能夠指定把列插入到第幾列,其餘的列順延。
df2.insert(0,'F',[888,888,888,888]) df2
使用join能夠將兩個DataFrame合併,但只根據行列名合併,而且以做用的那個DataFrame的爲基準。以下所示,新的df7是以df2的行號index爲基準的。
df6=pd.DataFrame(['my','name','is','a'],index=list('ACDH'),columns=list('G')) df6 df7=df2.join(df6) df7
可是,join這個方法還有how這個參數能夠設置,合併兩個DataFrame的交集或並集。參數爲'inner'表示交集,'outer'表示並集。
df8=df2.join(df6,how='inner') df8 df9=df2.join(df6,how='outer') df9
若是要合併多個Dataframe,能夠用list把幾個Dataframe裝起來,而後使用concat轉化爲一個新的Dataframe。
df10=pd.DataFrame([1,2,3,4],index=list('ABCD'),columns=['a']) df11=pd.DataFrame([10,20,30,40],index=list('ABCD'),columns=['b']) df12=pd.DataFrame([100,200,300,400],index=list('ABCD'),columns=['c']) list1=[df10.T, df11.T, df12.T] df13=pd.concat(list1) df13