1、描述性統計分析
(1)跟對應的NumPy相比,t他們都是基於沒有缺失數據的假設而構建的。
df = DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index = ['a','b','c','d'],
columns=['one','two'])
df
Out[53]:
one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
調用DataFrame的sum方法將會返回一個含有列小計的Series:
df.sum() #默認爲axis=0,傳入axis=1會按行進行求和計算
Out[54]:
one 9.25
two -5.80
dtype: float64
(2)NA值會自動被排除,除非整個切片(這裏是指行或列)都是NA,通過skipna選項可以禁用該功能:
df.mean(axis=1,skipna=False)
Out[55]:
a NaN
b 1.300
c NaN
d -0.275
dtype: float64
(3)約簡方法的選項
axis | 約簡的軸。DataFrame的行用0,列用1 |
skipna | 排除缺失值,默認值爲True |
level | 如果軸是層次化索引的(即MultiIndex),則根據level分組約簡 |
(4)間接統計
idxmin、idxmax:返回達到最小值或最大值的索引
df.idxmax()
Out[56]:
one b
two d
dtype: object
(5)累計型
df.cumsum()
Out[57]:
one two
a 1.40 NaN
b 8.50 -4.5
c NaN NaN
d 9.25 -5.8
(6)一次性產生多個彙總統計
df.describe()
Out[58]:
one two
count 3.000000 2.000000
mean 3.083333 -2.900000
std 3.493685 2.262742
min 0.750000 -4.500000
25% 1.075000 -3.700000
50% 1.400000 -2.900000
75% 4.250000 -2.100000
max 7.100000 -1.300000
obj = Series(['a','a','b','c']*4)
obj
Out[60]:
0 a
1 a
2 b
3 c
4 a
5 a
6 b
7 c
8 a
……
obj.describe()
Out[61]:
count 16
unique 3
top a
freq 8
dtype: object
count | 非NA值的數量 |
describe | 針對Series或各DataFrame列計算彙總統計 |
min、max | 計算最小值和最大值 |
argmin、argmax | 計算能夠獲得到最小值和最大值的索引位置(整數) |
idxmin、idxmax | 計算能夠獲取到最小值和最大值的索引值 |
quantile | 計算樣本的分位數(0到1) |
sum | 值的總和 |
mean | 值的平均值 |
median | 值得算術中位數(50%分位數) |
mad | 根據平均值計算平均絕對離差 |
var | 樣本值得方差 |
std | 樣本值的標準差 |
skew | 樣本值的偏度(三階矩) |
kurt | 樣本值的峯度(四階矩) |
cumsum | 樣本值的累計和 |
cummin、cummax | 樣本值的累計最大值和累計最小值 |
cumprod | 樣本值的累計積 |
diff | 計算一階差分(對時間序列很有用) |
pct_change | 計算百分數變化 |
2、相關係數與協方差
(1)Series的corr方法用於計算兩個Series中重疊的、非NA的、按索引對齊的值的相關係數。cov用於計算協方差
(2)DataFrame的corr和cov方法將以DataFrame的形式返回完整的相關係數或協方差矩陣:
(3)利用DataFrame的corrwith方法,可以計算其列或行跟另一個Series或DataFrame之間的相關係數。傳入一個Series將會返回一個相關係數值Series(針對各列進行計算)
(4)傳入一個DataFrame則會計算按列名配對的相關係數
3、唯一值、值計數、成員資格
isin | 計算一個表示“Series各值是否包含於傳入的值序列中”的布爾型數組 |
unique | 計算Series中的唯一值數組,按發現的順序返回 |
value_counts | 返回一個Series,其索引爲唯一值,其值爲頻率,按計數值降序排列 |
(1)unique
得到唯一值。返回的唯一值是未排序的,對結果再次進行排序可用.sort()
(2)value_counts()
用於計算一個Series中各值出現的頻率,爲了方便查看,結果是按值頻率降序排列的。
value_counts還是一個頂級pandas方法,可用於任何數組或序列:
pd.value_counts(obj.values,sort=False)
(3)isin
用於判斷矢量化集合的成員資格,可用於選取Series中或DataFrame列中數據的子集:
obj = Series(['c','a','d','a','a','b','b','c','c'])
mask = obj.isin(['b','c'])
mask
Out[64]:
0 True
1 False
2 False
3 False
4 False
5 True
6 True
7 True
8 True
dtype: bool
obj[mask]
Out[65]:
0 c
5 b
6 b
7 c
8 c
dtype: object
(4)得到DataFrame中多個相關列的一張柱狀圖
data = DataFrame({'Q1':[1,3,4,3,4],
'Q2':[2,3,1,2,3],
'Q3':[1,5,2,4,4]})
data
Out[12]:
Q1 Q2 Q3
0 1 2 1
1 3 3 5
2 4 1 2
3 3 2 4
4 4 3 4
result = data.apply(pd.value_counts).fillna(0)
result
Out[14]:
Q1 Q2 Q3
1 1.0 1.0 1.0
2 0.0 2.0 1.0
3 2.0 2.0 0.0
4 2.0 0.0 2.0
5 0.0 0.0 1.0