利用Pandas进行数据分析(3)——统计、处理缺失值、层次化索引
2017-03-17 15:12
931 查看
注:此系列参考了梁斌老师的课件和《利用Python进行数据分析》一书。
统计描述
描述和汇总统计
处理缺失值
NA处理方法
滤除缺失数据
填充缺失数据
层次化索引
索引方式
内层选取
透视表生成数据重塑
交换分层顺序
交换并排序分层
对于非数值型数据,describe会产生另外一种汇总统计:
Python内置的None值也会被当作NA处理:
丢弃含有缺失值的行:dropna()
具体用法这里就不再赘述
请看以下例子
是不是很神奇~
此页内容可以参考《利用pandas进行数据分析》的第五章的后半部分
统计描述
描述和汇总统计
处理缺失值
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
a | b | c | d | |
---|---|---|---|---|
0 | 2.052675 | -0.061795 | -1.043487 | -1.350961 |
1 | 0.328572 | -0.752768 | 1.490905 | 0.694892 |
2 | -0.215059 | -0.025962 | 0.050865 | 1.061136 |
3 | -1.005072 | 0.568074 | -0.480307 | 0.262490 |
4 | 0.977688 | -0.641019 | 1.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()
a | b | c | d | |
---|---|---|---|---|
count | 5.000000 | 5.000000 | 5.000000 | 5.000000 |
mean | 0.427761 | -0.182694 | 0.227651 | 0.009918 |
std | 1.163919 | 0.533357 | 1.065463 | 0.985427 |
min | -1.005072 | -0.752768 | -1.043487 | -1.350961 |
25% | -0.215059 | -0.641019 | -0.480307 | -0.617966 |
50% | 0.328572 | -0.061795 | 0.050865 | 0.262490 |
75% | 0.977688 | -0.025962 | 1.120281 | 0.694892 |
max | 2.052675 | 0.568074 | 1.490905 | 1.061136 |
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,该对象的类型与源类型一样 |
notnull | isnull的否定式 |
滤除缺失数据,
可以使用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()
1 | 2 | 3 | |
---|---|---|---|
a | 0.169239 | 0.689271 | 0.879309 |
b | -0.699176 | 0.260446 | -0.321751 |
c | 0.893105 | 0.757505 | NaN |
d | NaN | -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进行数据分析(11) pandas基础: 层次化索引
- 利用Python进行数据分析 pandas基础: 处理缺失数据
- 利用Python进行数据分析(11) pandas基础: 层次化索引
- 利用Python进行数据分析(10) pandas基础: 处理缺失数据
- 利用Python进行数据分析(10) pandas基础: 处理缺失数据
- 利用python进行数据分析(三):pandas--处理数据的工具
- 【Python数据分析与展示】(六)处理缺失数据,层次化索引
- 利用 Python 进行数据分析(九)pandas 汇总统计和计算
- 利用Python进行数据分析(9) pandas基础: 汇总统计和计算
- 利用Python进行数据分析——pandas入门(五)(4)
- 利用Python进行数据分析(12) pandas基础: 数据合并
- 利用Pythonj进行数据分析学习笔记——第五章 pandas入门
- 机器学习(七)使用pandas库进行数据分析_——统计信息和离散化
- 利用Pandas进行数据分析(2)——pandas数据基本操作
- 利用 Python 进行数据分析(七)pandas 简单介绍(Series 和 DataFrame)
- 利用Python进行数据分析(14) pandas基础: 数据转换
- python - 利用Pandas对某app数据进行整理、分析并存入mongodb
- 利用Python进行数据分析(13) pandas基础: 数据重塑/轴向旋转
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
- 利用Python进行数据分析(15) pandas基础: 字符串操作