Python数据分析学习入门二
- 数据处理
- 缺失值处理
- Dropna
- fillna
- replace
- 数据基本处理
- mean均值
- std标准差
- count计数
- sort排序
- groupby分组
数据处理
在上一次篇文章,我总结了几种学到的数据的运算方法,这这篇文章中会介绍几种数据的处理办法.
缺失值处理
数据缺失值处理有好几种对应的函数,接下来介绍三种我学习的函数Dropna,fillna,replace.这三种函数功能上的区别,以及不同的适用场景.这三种函数都在pandas里,所以写代码时首先要导入pandas
Dropna
dropna()函数是用来滤除缺失值的,默认的情况下是清除所有的含有NaN数据的行.
例1.
NACIS2016_null.dropna()#所有含有NaN的数据的行都会被滤除
NACIS2016_null.dropna(how='all')#所有的列都是NaN的数据的行会被删除
参数thresh.
thresh=n 保留至少含有n个非空数据.
例2.
NACIS2016_null.dropna(thresh=10).shape #保留有10个非空数据的行.
收集的数据有些列几乎就没有有效数据,这是就可以使axis=1滤除某一列.
例3.
NACIS2016_null['Jan. 2016']=np.NaN
NACIS2016_null.dropna(axis=1,how="all") #就滤除例jan.2016这一列
fillna
fillna能自动填充NaN数据,并返回填充后的结果.
例4.
df = pd.DataFrame({'id':[1, 2, np.nan],
'item1':[1, 2, 3],
'item2':[1, np.nan, 3]}
print(df)
df.fillna(0, inplace = True) #inplace = True,就将原表格修改了
print(df)
fillna()函数有inplace参数,将inplace设为true就将原DataFrame中的数据更改了,不然默认为false,只改了显示出来的表格,原DataFrame中的数据并没有改变,再次打印还是会有空数据.
replace
replace可以替换缺失值,但replace除了可以替换缺失值之外还有其他的拓展功能,可以改变已有的值或者改变某一列的值.
df = pd.DataFrame({'id':[1, 2, np.nan],
'item1':[1, 2, 3],
'item2':[1, np.nan, 3]})
print('################Before Replace###########')
print(df)
print('################After Replace###########')
print(df.replace(np.nan, 0))
################Before Replace###########
id item1 item2
0 1.0 1 1.0
1 2.0 2 NaN
2 NaN 3 3.0
################After Replace###########
id item1 item2
0 1.0 1 1.0
1 2.0 2 0.0
2 0.0 3 3.0
但是replace不能替换原表的内容.
总结:dropna是用来滤除缺失值的,但滤除的程度可以控制,不改变原表内容;fillna可以自动填充缺失数据,可以改原表内容;replace是替换缺失值,也可以替换已有的值,不改变原表内容.
数据基本处理
接下来介绍数据基本处理中常用的几种数据预处理方法.
mean均值
mean函数默认求每一列的的均值,如想求每行的均值则可设置axis(1)来求每一行的均值,并且默认跳过缺失值.
print(df)
print(df.mean())
print(df.mean(1))
id item1 item2
0 1.0 1 1.0
1 2.0 2 NaN
2 NaN 3 3.0
id 1.5
item1 2.0
item2 2.0
dtype: float64
0 1.0
1 2.0
2 3.0
dtype: float64
可以设置skipna = False,这样就不会跳过缺失值,但是这样会让计算报错,所以可以先把缺失值替换成0,再计算,不过这样意义不大.
std标准差
计算样本的标准差,用法与mean函数基本一致.在numpy和pandas中都有这个函数,但是功能有一定的差异.
count计数
用法与mean和std相同,默认是忽略缺失值的.
sort排序
sort函数的用法:
DataFrame.sort_values(by,axis=0,ascending=True, inplace=False,kind='quicksort',na_position='last')[source]
老版的pandas里的位sort新版的为sort_values.
.by为要进行的列的名称;
.ascending为排序的方式,true为升序,false为降序,默认为true的;
.axis为排序的轴列排序axis为0;
.inplace默认为false,表示对数据进行排序,不创建新实例;
.kind可选择排序的方式,如快速排序;
no_position对NaN值的处理方式,默认为last,就是将缺失值放在排序的最后,也有first表示将缺失值放在最前;
groupby分组
groupby函数用来对数据进行聚集,分组运算.
它的语法结构为:
Dataframe['运算对象'].groupby(Dataframe['分组对象'])
计算每个销售员的总销售额:
(sales['Quantity']*sales['Price']).groupby(sales['Account']).sum()
Account
146832 130000
714466 40000
714467 10000
737550 35000
dtype: int64