第5天:Pandas,露两手



今天将带来第5天的学习日记。

 

目录如下:

 

前言

 

一、描述性统计

1. 加总

2. 描述性统计

3. 相关系数

 

二、缺失值处理

1. 丢弃缺失值

2. 填充缺失值

 

三、层次化索引

1. 用层次索引选取子集

2. 自定义变量名

3. 变量名与索引互换

4. 数据透视表

 

四、数据导入导出

1. 数据导入

2. 数据导出

 

 

 

统计师的Python日记【第5天:Pandas,露两手】

 

前言

 

根据我的Python学习计划:

 

Numpy Pandas 掌握一些数据清洗、规整、合并等功能 掌握类似与SQL的聚合等数据管理功能 能够用Python进行统计建模、假设检验等分析技能 能用Python打印出100元钱 能用Python帮我洗衣服、做饭 能用Python给我生小猴子......

 

上一集开始学习了Pandas的数据结构(Series和DataFrame),以及DataFrame一些基本操作:改变索引名、增加一列、删除一列、排序。

 

今天我将继续学习Pandas。

 

一、描述性统计

 

想拿一个简单的数据试试手,翻到了一份我国2012-2015年季度GDP的数据,如下表(单位:万亿),

 

想整理到DataFrame中,如何处理?

 

用DataFrame:

 

gdp=DataFrame([[11.61,13.08,13.67, 15.05],[12.81, 14.30, 15.07, 16.62], [13.87, 15.52, 16.35, 17.87],[14.80, 16.62,17.36, 18.94]], index=['2012', '2013', '2014', '2015'],columns=['s1', 's2','s3', 's4'])

 

 

得到了一张非常清爽的DataFrame数据表。

 

现在我要对这张表进行简单的描述性统计:

 

1. 加总

 

.sum()是将数据纵向加总(每一列加总)

 

 

这就很奇怪了,2012、2013、2014、2015四个年份的第一季度加总,这是什么鬼?其实我更想看横向加总,就是每一年四个季度加总,得到一年的总和,原来,指定axis=1即可:

 

 

特别注意的是缺失值的情况!

 

如果有缺失值,比如四个数值2,3,1,NaN,那么加总的结果是2+3+1+NaN=6,也就是缺失值自动排除掉了!这点特别注意,因为这可能会导致你的数据不必苛,比如某一年少一个季度的值,那么这一年其实就是三个季度的加总,跟其他年份四个季度怎么比?

 

因为刚入行的时候在excel上犯过这类错误,所以在此记录一下。

 

解决办法是指定 skipna=False,有缺失值将不可加总:

 

>>>df=DataFrame([[1.4,np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], index=['a', 'b', 'c','d'], columns=['one', 'two'])

>>>df

 

 

这是一组有缺失值的数据,现在来加总:

 

 

还可以累积加总:

 

 

关于缺失值,在后面还要专门学习(二、缺失值)。

 

2. 描述性统计

 

pandas除了加总,还可以利用 .describe() 得到每列的各种描述性分析:

 

 

当然,除了用 .describe() 还可以自己用函数来得到,比如:

 

一些函数记录在此(参考书本《利用Python进行数据分析》):

 

 

方法

描述

count()

NA值的数量

describe()

各列的汇总统计

min()max()

最小、最大值

argmin()argmax()

最小、最大值对应的索引位置

idxmin()idxmax()

最小、最大值对应的索引值

quantile()

样本分位数

sum()

加总

mean()

均值

median()

中位数

mad()

根据平均值计算的平均绝对离差

var()

方差

std()

标准差

skew()

偏度

kurt()

峰度

cumsum()

累计和

cummax()cummin()

累计最大值和累计最小值

cumprod()

累计积

diff()

一阶差分

pct_change()

百分数变化

 

 

3. 相关系数

 

利用 .corr() 可以计算相关系数,比如计算四个季度的相关系数:

 

 

计算年份的相关系数呢?转置一下就可以了:

 

 

然而可惜的是——没有P值!

 

也可以单独只计算两列的系数,比如计算S1与S3的相关系数:

 

 

 

二、缺失值处理

 

Pandas和Numpy采用NaN来表示缺失数据,

 

 

1. 丢弃缺失值

 

两种方法可以丢弃缺失值,比如第四天的日记中使用的的城市人口数据:

 

 

将带有缺失的行丢弃掉:

 

 

这个逻辑是:“一行中只要有一个格缺失,这行就要丢弃。”

 

那如果想要一行中全部缺失才丢弃,应该怎么办?传入 how=’all‘ 即可。

 

 

Chu那行被丢弃掉了。

 

另一种丢弃缺失值的方法是 data[data.notnull()] ,但是只能处理 数值型 数据。

 

 

 

2. 填充缺失值

 

.fillna() 方法对缺失值进行填充,比如将缺失值全部变为0:

 

 

还可以指定填充方法:

 

method=

  • 'ffill' 向前填充,即将前面的内容填充进来;
  • 'bffill' 向后填充,即将后面的内容填充进来。

 

举个例子:

 

 

后面baoding的pop被填充进来了。

 

 

三、层次化索引

 

我们前面的索引就是Chu、Bao、Ha、Hu......,单一层次索引,如果索引为亚洲-中国-各个省-各个市,变量为人口,这就是典型的层次化索引。

 

>>>worldPop = pd.Series([13.74,13.41, 13.08, 1.27, 3.21,3.09],index=[['China','China','China','Japan','US','US'],[2015,2010,2005,2015,2015,2010]])

 

这个例子中索引有两层,国家和年份,来学习一些简单的操作。

 

1. 用层次索引选取子集:

 

 

 

选取多个子集呢?

 

 

 

2. 自定义变量名

 

自定义变量名的好处很多,可以更方便的对数据进行选择。使用 columns= 自定义变量名:

 

 

索引的名字也可以当变量一样命名,分别命名country和year两个索引名:

 

 

.swaplevel() 可以调换两个索引contry和year的位置:

 

 

 

3. 将索引与变量互换

 

使用 .reset_index([]) 可以将索引变成列变量。

 

 

使用 .set_index([]),也可以讲变量变成索引:

 

 

4. 数据透视表

 

大家都用过excel的数据透视表,把行标签和列标签随意的布局,pandas也可以这么实施,使用.unstack()即可:

 

 

 

四、数据的导入导出

 

1. 数据导入

 

表格型数据可以直接读取为DataFrame,比如用 read_csv 直接读取csv文件:

 

有文件testSet.csv:

 

 

存在D盘下面,现在读取:

 

 

 

发现了一个问题——第一行被当做变量名了!所以要指定 header=None

 

 

变量名变成了0、1,还是变扭啊,我们来指定个变量吧:

 

 

names= 可以指定变量名。

 

看到var1那列,如果想用这列做索引,咋办?好办!

 

 

index_col= 即可指定索引。

 

除了read_csv,还有几种读取方式:

 

 

函数

说明

read_csv

读取带分隔符的数据,默认分隔符为逗号

read_table

读取带分隔符的数据,默认分隔符为制表符

read_fwf

读取固定宽格式数据(无分隔符)

read_clipboard

读取剪贴板中的数据

 

read_table可以读取txt的文件,说到这里,想到一个问题——如果txt文件的分隔符很奇怪怎么办?

 

比如——

 

 

这个testSet.txt文件用“loves”做分隔符!

 

隐隐觉得有人向我表白,但是有点恶心......

 

在实际中,更可能是某种乱码,解决这种特殊分隔符,用 sep= 即可。

 

 

忽略红色背景的部分。

 

还有一种情况是开头带有注释的:

 

 

使用 skiprows= 就可以指定要跳过的行:

 

 

从我多年统计师从业经验来看,学会了如何跳过行,也要学如何读取某些行,使用 nrows=n 可以指定要读取的前n行,以数据

 

 

为例:

 

 

2. 数据导出

 

导出csv文件使用 data.to_csv 命令:

 

data.to_csv(outFile, index=True,encoding='gb2312')

 

index=True 指定输出索引,当数据中有中文的时候用 encoding= 来解码,否则会出现乱码,一般 gb2312 即可,有些例外的情况用 gb18030 基本都能解决。

 

来自 <http://mp.weixin.qq.com/s?__biz=MjM5MDEzNDAyNQ==&mid=402829681&idx=1&sn=3042132921889b2b5414fff28513b05b&scene=21>

 

基于STM32F407,使用DFS算法实现最短迷宫路径检索,分为三种模式:1.DEBUG模式,2. 训练模式,3. 主程序模式 ,DEBUG模式主要分析bug,测量必要数据,训练模式用于DFS算法训练最短路径,并将最短路径以链表形式存储Flash, 主程序模式从Flash中….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值