zarten,互聯(lián)網(wǎng)一線工作者。
博客地址:zhihu.com/people/zarten
概述
這篇將介紹Series和DataFrame公有的一些重要的基礎功能知識點。
重新索引排列
重新索引排列是指:可以將索引重新排列,若給出的新索引在舊索引中不存在時,會引入缺失值NaN。
重新索引排列不會改變原來的對象,而是會生成一個重新排列索引的對象。
使用Series和DataFrame的reindex()
方法即可。
Series
import pandas as pd
zarten_ser = pd.Series(['z1','z2','z3','z4'])
有時重新排列時,若新增一個之前沒有的索引時值會自動填充NaN
,若不想填充NaN
,可以使用參數(shù)method= ‘ffill’
,這時填充值會跟前面的值一樣
同時也可以使用參數(shù) fill_value
來自己指定值,如下
DataFrame
DataFrame也是一樣的,若不指定,默認是重新排列行,若指定列,也可重新排序列。
import pandas as pd
info = {
'name' : ['zarten_1', 'zarten_2', 'zarten_3'],
'age' : [18, 19, 20]
}
zarten_df = pd.DataFrame(info)
若需要重新排序列,只需指定參數(shù)columns
即可
刪除指定索引
刪除指定的一個或多個索引及其對應的值,使用drop()
方法,默認是產(chǎn)生一個新的對象,不會改變原有對象。
刪除多個索引時傳入一個列表
注意:若指定的索引不存在時,會報錯
Series
import pandas as pd
zarten_ser = pd.Series(['z1','z2','z3','z4'])
上面使用drop后都會產(chǎn)生一個新的對象,不會改變原對象。若想直接在原對象上進行刪除,可以使用參數(shù) inplace= True
(慎用!?。。?br>
DataFrame
同樣,默認是刪除行,若要刪除列索引及值,使用axis參數(shù),axis默認為0代表行,1代表列
import pandas as pd
info = {
'name' : ['zarten_1', 'zarten_2', 'zarten_3'],
'age' : [18, 19, 20]
}
zarten_df = pd.DataFrame(info)
相同數(shù)據(jù)結構間的算術運算
相同的數(shù)據(jù)結構(Series和DataFrame)間的算術運算,跟并集的思想類似,也就是沒有對應的索引時,會自動填充NaN
Series
import pandas as pd
zarten_ser_1 = pd.Series([2,'z2','z3','z4'])
zarten_ser_2 = pd.Series([3,'w2','w3','w4','w5'])
zarten_ser_1_2 = zarten_ser_1 + zarten_ser_2
若想填充自己指定的值時,可以使用add方法,參數(shù)fill_value
import pandas as pd
zarten_ser_1 = pd.Series([2,5,3,7])
zarten_ser_2 = pd.Series([3,3,4,4,5])
DataFrame
DataFrame數(shù)據(jù)結構算術運算時就比較刁鉆了,必須是行和列索引都相同時才能相加,若有一個不同就是NaN
import pandas as pd
info_1 = {
'name' : ['zarten_1', 'zarten_2', 'zarten_3'],
'age' : [18, 19, 20]
}
zarten_df_1 = pd.DataFrame(info_1)
zarten_df_2 = pd.DataFrame([['x1','x2','x3'], ['y1','y2','y3'], ['z1','z2','z3']], index= [0,'b','c'], columns= ['name','w','t'])
還有其他的一些算術運算如下圖,這里將不再闡述,大同小異
Series與DataFrame之間的運算
這兩者間的運算會廣播到所有元素。
若互相都沒有相同的索引時,同樣會產(chǎn)生NaN
import pandas as pd
import numpy as np
zarten_df = pd.DataFrame(np.arange(12).reshape((4,3)), index= ['a','b','c','d'], columns= ['x','y','z'])
zarten_ser = pd.Series([1,2,3], index= ['x','y','z'])
從上圖可以看到,DataFrame每一行都減去了Series。
更多的操作可以詳細閱讀官方文檔。
排序
索引排序:行或列索引排序,使用sort_index()函數(shù),默認是行索引排序,且默認是升序
值排序:也可對值排序,使用函數(shù)sort_values()函數(shù)
Series
import pandas as pd
zarten_ser = pd.Series([1,20,18,4], index= ['x','y','z','a'])
索引排序:
值排序:
DataFrame
import pandas as pd
import numpy as np
zarten_df = pd.DataFrame(np.arange(12).reshape((4,3)), index= [4,1,2,3], columns= ['z','x','y'])
索引排序:
由上圖可看到,默認為行索引排序,若需要列索引排序,只需指定axis=1
即可
值排序:由于DataFrame是行和列組成,值排序是列的由上到下的排序,可指定一列或多列,通過by
參數(shù)
也可以進行多列排序,只需傳入?yún)?shù)by
一個列表即可。根據(jù)by
指定的順序優(yōu)先排列
統(tǒng)計
下面將介紹一些常用的統(tǒng)計方法
求和
使用函數(shù)sum()
,默認是每一列求和,可以通過參數(shù)axis
來設置行或列,DataFrame的結果是一個Series對象
Series
import pandas as pd
zarten_ser = pd.Series([1,2,3,4], index= ['x','y','z','a'])
DataFrame
import pandas as pd
import numpy as np
zarten_df = pd.DataFrame(np.arange(12).reshape((4,3)), index= [4,1,2,3], columns= ['z','x','y'])
由上圖可看到,求和默認是每列求和,若需要每行求和,可使用參數(shù)axis= 0
還有其他參數(shù),如:若存在NaN時,默認結果會剔除NaN,可通過參數(shù)skipna
設置。
其他參數(shù)如下圖所示:
其他統(tǒng)計方法
比如比較常用的describe()
函數(shù),一次可以統(tǒng)計出多方面的信息
import pandas as pd
import numpy as np
zarten_df = pd.DataFrame(np.arange(12).reshape((4,3)), index= [4,1,2,3], columns= ['z','x','y'])
由上圖看到,結果有多項,都是針對列而言,具體含義如下:
count : 計數(shù)(此列的總個數(shù))
mean :平均值
std :標準差
min :最小值
25% :下四分位
50% :中位數(shù)
75% :上四分位
max :最大值
其他統(tǒng)計函數(shù)如下所示:
第三方庫統(tǒng)計工具
第三方庫:pandas-profiling
官方地址:
https://github.com/pandas-profiling/pandas-profiling
Python中文社區(qū)作為一個去中心化的全球技術社區(qū),以成為全球20萬Python中文開發(fā)者的精神部落為愿景,目前覆蓋各大主流媒體和協(xié)作平臺,與阿里、騰訊、百度、微軟、亞馬遜、開源中國、CSDN等業(yè)界知名公司和技術社區(qū)建立了廣泛的聯(lián)系,擁有來自十多個國家和地區(qū)數(shù)萬名登記會員,會員來自以工信部、清華大學、北京大學、北京郵電大學、中國人民銀行、中科院、中金、華為、BAT、谷歌、微軟等為代表的政府機關、科研單位、金融機構以及海內(nèi)外知名公司,全平臺近20萬開發(fā)者關注。