您的位置:首页 > 编程语言 > Python开发

利用Pandas进行数据分析(3)——统计、处理缺失值、层次化索引

2017-03-17 15:12 931 查看
注:此系列参考了梁斌老师的课件和《利用Python进行数据分析》一书。

统计描述
描述和汇总统计

处理缺失值
NA处理方法

滤除缺失数据

填充缺失数据

层次化索引
索引方式

内层选取

透视表生成数据重塑

交换分层顺序

交换并排序分层

import numpy as np
import pandas as pd
from pandas import DataFrame,Series


df_obj = pd.DataFrame(np.random.randn(5,4), columns = ['a', 'b', 'c', 'd'])
df_obj


abcd
02.052675-0.061795-1.043487-1.350961
10.328572-0.7527681.4909050.694892
2-0.215059-0.0259620.0508651.061136
3-1.0050720.568074-0.4803070.262490
40.977688-0.6410191.120281-0.617966
df_obj.sum()


a    2.138804
b   -0.913469
c    1.138257
d    0.049591
dtype: float64


df_obj.max()


a    2.052675
b    0.568074
c    1.490905
d    1.061136


df_obj.min(axis=1)


0   -1.350961
1   -0.752768
2   -0.215059
3   -1.005072
4   -0.641019
dtype: float64


统计描述

df_obj.describe()


abcd
count5.0000005.0000005.0000005.000000
mean0.427761-0.1826940.2276510.009918
std1.1639190.5333571.0654630.985427
min-1.005072-0.752768-1.043487-1.350961
25%-0.215059-0.641019-0.480307-0.617966
50%0.328572-0.0617950.0508650.262490
75%0.977688-0.0259621.1202810.694892
max2.0526750.5680741.4909051.061136
对于非数值型数据,describe会产生另外一种汇总统计:

obj = Series(['a','a','b','c']*4)
obj


0     a
1     a
2     b
3     c
4     a
5     a
6     b
7     c
8     a
9     a
10    b
11    c
12    a
13    a
14    b
15    c
dtype: object


obj.describe()


count     16
unique     3
top        a
freq       8
dtype: object


描述和汇总统计

方法说明
count非NA值得数量
describe针对series或各dataframe列计算汇总统计
min max计算最小值和最大值
argmin,argmax计算能够获取到最小值和最大值的索引位置(整数)
idxmin , idxmax计算能够获取到最小值和最大值idea索引值
quantile计算样本的分位数(0到1)
sum值得总和
mean值得平均数
median值的算数中位数
mad根据平均值计算平均绝对离差
var样本值得方差
std样本值得标准差
skew样本值得偏度(三阶矩)
kurt样本值的峰度(四阶矩)
cumsum样本值的累计和
cummin,cummax样本值的累计最大值和累计最小值
cumprod样本值的累计积
diff计算一阶差分(对时间序列很有用)
pct_change计算百分数变化

处理缺失值

string_data = Series(['aardvark', 'articchoke', 'np.nan', 'avocado'])
string_data


0      aardvark
1    articchoke
2        np.nan
3       avocado
dtype: object


string_data.isnull()


0    False
1    False
2    False
3    False
dtype: bool


Python内置的None值也会被当作NA处理:

string_data[0] = None
string_data.isnull()


0     True
1    False
2    False
3    False
dtype: bool


NA处理方法

方法说明
count非NA值得数量
dropna根据各标签的值中是否存在缺失数据对轴标签进行过滤,可通过阈值调节对缺失值得容忍度
fillna用指定值或插值方法(如ffill或bfill)填充确实数据
isnull返回一个含有布尔值的对象,这些布尔值表示哪些值是缺失值/NA,该对象的类型与源类型一样
notnullisnull的否定式

滤除缺失数据,

可以使用notnull()函数(和isnull是对应的)

丢弃含有缺失值的行:dropna()

填充缺失数据

使用最多的就是fillna函数

具体用法这里就不再赘述

层次化索引

层次化索引(hierarchical indexing)是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别

请看以下例子

data = Series(np.random.randn(10), index = [['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd' ],[1,2,3,1,2,3,1,2,2,3]])
data


a  1    0.169239
2    0.689271
3    0.879309
b  1   -0.699176
2    0.260446
3   -0.321751
c  1    0.893105
2    0.757505
d  2   -1.223344
3   -0.802812
dtype: float64


索引方式

data['b':'d']


b  1   -0.699176
2    0.260446
3   -0.321751
c  1    0.893105
2    0.757505
d  2   -1.223344
3   -0.802812
dtype: float64


内层选取

data[:, 2]


a    0.689271
b    0.260446
c    0.757505
d   -1.223344
dtype: float64


透视表生成(数据重塑)

data.unstack()


123
a0.1692390.6892710.879309
b-0.6991760.260446-0.321751
c0.8931050.757505NaN
dNaN-1.223344-0.802812
data.unstack().stack()


a  1    0.169239
2    0.689271
3    0.879309
b  1   -0.699176
2    0.260446
3   -0.321751
c  1    0.893105
2    0.757505
d  2   -1.223344
3   -0.802812
dtype: float64


交换分层顺序

data


a  1    0.169239
2    0.689271
3    0.879309
b  1   -0.699176
2    0.260446
3   -0.321751
c  1    0.893105
2    0.757505
d  2   -1.223344
3   -0.802812
dtype: float64


data.swaplevel()


1  a    0.169239
2  a    0.689271
3  a    0.879309
1  b   -0.699176
2  b    0.260446
3  b   -0.321751
1  c    0.893105
2  c    0.757505
d   -1.223344
3  d   -0.802812
dtype: float64


交换并排序分层

data.swaplevel().sortlevel()


1  a    0.169239
b   -0.699176
c    0.893105
2  a    0.689271
b    0.260446
c    0.757505
d   -1.223344
3  a    0.879309
b   -0.321751
d   -0.802812
dtype: float64


是不是很神奇~

此页内容可以参考《利用pandas进行数据分析》的第五章的后半部分
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 数据分析 pandas