高級方法
-
apply()
apply()是一個非常常用并且好用的方法,它允許我們自定義一個函數(shù)并且應用到我們的數(shù)據(jù)中。
比如我們現(xiàn)在有這樣的需求,求出每一列數(shù)據(jù)的最大值與最小值的差,可以這樣使用。
image默認情況,是以0軸方向應用的這個函數(shù),但是我們可以指定1軸,這時候,我們求得就是每一行的最大值與最小值的差
image在函數(shù)比較復雜的情況下,你也可以單獨的定義一個函數(shù),而不是使用lambda表達式。
image -
applymap()
applymap()與apply()區(qū)別在于,applymap()是以數(shù)據(jù)里面的每一個元素為單位,傳給apply里面的函數(shù),而apply()則是以行或者列為單位。比如,我們想讓我們全部的數(shù)據(jù)每一個都加上5。
image -
agg()
對一組數(shù)據(jù)進行多種統(tǒng)計操作,比如求和,均值,計數(shù),只需要將需要的函數(shù)名放在一個列表里面。df = pd.DataFrame(np.random.randn(5,4), columns=['value1', 'value2', 'value3', 'value4']) df.agg(['mean', 'max', 'min'])
image -
pivot_table()
相當于excel里面的數(shù)據(jù)透視表
首選創(chuàng)建一組示例數(shù)據(jù)df = pd.DataFrame({'key1':['a','b','b','b','a'], 'key2':['one','two','one','two','one'], 'value1':np.random.randn(5), 'value2':np.random.randn(5)}) df
使用數(shù)據(jù)透視表
imagedf.pivot_table(['value1'], index='key1', columns='key2')
image同樣是上面的數(shù)據(jù),還可以進行分項匯總
df.pivot_table(index='key1', columns='key2', margins=True)
image -
cross_tab()
交叉表,可以按照指定的行和列統(tǒng)計分組頻數(shù)pd.crosstab(index = df.key1, columns = df.key2, margins=True)
image -
map()
使用字典,Series或者函數(shù),將Series里面的數(shù)據(jù)做一個映射。train['Sex_male'] = train.Sex.map({'female':0, 'male':1})
通過以上的變換,就可以講Sex這一列的數(shù)據(jù)中的female映射成0,male映射成1.
-
get_dummies()
一位有效數(shù)字(one-hot)編碼, 下面是將泰坦尼克號的港口進行編碼。Embarked_dummies = pd.get_dummies(train.Embarked, prefix='Embarked') Embarked_dummies.head()
image在編碼之后,我們可以配合contact()方法將編碼的結果合并到原來的數(shù)據(jù)上。
train = pd.concat([train, Embarked_dummies], axis=1)
另外,使用contact()方法還可以將DataFrame類型進行編碼。
pd.get_dummies(train, columns=['Sex', 'Embarked'])
需要注意的是,以上的方法將會刪除train中Sex和Embarked列,返回一個train的拷貝。