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