前面几篇博客写了pandas的两种基本数据结构Series和Dataframe,其实pandas里面还有一个非常好用的模块是时间模块,但是这个模块一般用的不多,对学金融和会计的同学可能比较重要,其他行业用的应该不是很多,我就不写有关它的部分了,今天这篇呢写一下Pandas的数值计算和统计基础部分,主要是一些数学函数的使用
(1)基本参数:axis、skipna
axis参数默认为0,按列来计算,当axis=1时,以行来计算。skipna参数:是否忽略NaN,默认True,如False,有NaN的列统计结果仍未NaN
df = pd.DataFrame({'key1':[4,5,3,np.nan,2],
'key2':[1,2,np.nan,4,5],
'key3':[1,2,3,'j','k']},
index = ['a','b','c','d','e'])#创建Dataframe
print(df)
输出结果:
先来看axis参数
m1 = df.mean()#按列求均值
m2 = df.mean(axis=1)#按行求均值计算
print(m1)
print('----------')
print(m2)
再来看skipna参数
m3 = df.mean(skipna=False)
m4 = df.mean(skipna=True)
print(m3)
print(m4)
输出结果:
因为原来数据中有空值,skipna的参数为False的时候不忽略空值,所以均值输出仍为空值
(2)主要数学计算方法1,可用于Series和DataFrame
df = pd.DataFrame({'key1':np.arange(10),
'key2':np.random.rand(10)*10})
print(df)
print('-----')
print(df.count(),'→ count统计非Na值的数量\n')
print(df.min(),'→ min统计最小值\n',df['key2'].max(),'→ max统计最大值\n')
print(df.quantile(q=0.75),'→ quantile统计分位数,参数q确定位置\n')
print(df.sum(),'→ sum求和\n')
print(df.mean(),'→ mean求平均值\n')
print(df.median(),'→ median求算数中位数,50%分位数\n')
print(df.std(),'\n',df.var(),'→ std,var分别求标准差,方差\n')
print(df.skew(),'→ skew样本的偏度\n')
print(df.kurt(),'→ kurt样本的峰度\n')
这些就是一些非常非常基本的数学统计函数,没有什么要特别注意的地方
(3)主要数学计算方法2,可用于Series和DataFrame
df['key1_s'] = df['key1'].cumsum()
df['key2_s'] = df['key2'].cumsum()
print(df,'→ cumsum样本的累计和\n')
df['key1_p'] = df['key1'].cumprod()
df['key2_p'] = df['key2'].cumprod()
print(df,'→ cumprod样本的累计积\n')
print(df.cummax(),'\n',df.cummin(),'→ cummax,cummin分别求累计最大值,累计最小值\n')
# 会填充key1,和key2的值
输出结果:
后面做数据分析时比较常用的是cumsum(),求数据的累积和,这个经常用来观察数据的一些特征
(4)唯一值
s = pd.Series(list('asdvasdcfgg'))
sq = s.unique()
print(s)
print(sq,type(sq))
print(pd.Series(sq))
# 得到一个唯一值数组
# 通过pd.Series重新变成新的Series
sq.sort()
print(sq)
# 重新排序
输出结果:
unique()就是用来挑选数组中的唯一值
(5)值计数–.value_counts()
sc = s.value_counts(sort = False) # 也可以这样写:pd.value_counts(sc, sort = False)
print(sc)
输出结果:
.value_counts()在后面还是比较常用的,经常用来统计数据的数量
(6)成员资格—.isin()
s = pd.Series(np.arange(10,15))
df = pd.DataFrame({'key1':list('asdcbvasd'),
'key2':np.arange(4,13)})
print(s)
print(df)
print('-----')
print(s.isin([5,14]))
print(df.isin(['a','bc','10',8]))
输出结果:
这个主要用来做一下判断使用,得到的是一个布尔值的Series或者Dataframe
今天就到这里啦~
我是一位211高校在读的本科生,是个耿直GIRL,对数据分析比较感兴趣,去年拿到了数学建模国家一等奖,今年参加了美赛还没结果,参加比赛选的题型都是大数据型,用过Excel,Spss,Lingo,MATLAB做数据分析,现在觉得Python比较高效,做数据可视化也非常方便,每天都在坚持学习,对Python数据分析和数据可视化有兴趣的可以关注我哦,每天都会更新的,跟我一起进步呀