资讯专栏INFORMATION COLUMN

Python数据分析入门之pandas总结基础(二)

verano / 3490人阅读

摘要:一大熊猫世界来去自如的老生常谈,从基础来看,我们仍然关心对于与外部数据是如何交互的。函数受限制问题唯一重要的参数,标志着一个的第个页将会被取出。数据分析入门之总结基础一欢迎来翔的博客查看完成版。

一.大熊猫世界来去自如:Pandas的I/O

老生常谈,从基础来看,我们仍然关心pandas对于与外部数据是如何交互的。

1.1 结构化数据输入输出

read_csv与to_csv 是⼀对输⼊输出的⼯具,read_csv直接返回pandas.DataFrame,⽽to_csv只要执行命令即可写文件

read_table:功能类似

read_fwf:操作fixed width file

read_excel与to_excel方便的与excel交互

header 表⽰数据中是否存在列名,如果在第0行就写就写0,并且开始读数据时跳过相应的行数,不存在可以写none

names 表示要用给定的列名来作为最终的列名

encoding 表⽰数据集的字符编码,通常而言一份数据为了⽅便的进⾏⽂件传输都以utf-8作为标准

这里用的是自己的一个csv数据,因为找不到参考的这个pdf中的数据。

cnames=["经度","纬度"]

taxidata2 = pd.read_csv("20140401.csv",header = 4,names=cnames,encoding="utf-8")

taxidata2

全部参数的请移步API:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html#pandas.read_csv

这里介绍一些常用的参数:

读取处理:

skiprows:跳过⼀定的⾏数

nrows:仅读取⼀定的⾏数

skipfooter:尾部有固定的⾏数永不读取

skip_blank_lines:空⾏跳过

内容处理:

sep/delimiter:分隔符很重要,常⻅的有逗号,空格和Tab(" ")

na_values:指定应该被当作na_values的数值

thousands:处理数值类型时,每千位分隔符并不统⼀ (1.234.567,89或者1,234,567.89都可能),此时要把字符串转化为

数字需要指明千位分隔符

收尾处理:

index_col:将真实的某列(列的数⺫,甚⾄列名)当作index

squeeze:仅读到⼀列时,不再保存为pandas.DataFrame⽽是pandas.Series

1.2 Excel ... ?

对于存储着极为规整数据的Excel而言,其实是没必要一定用Excel来存,尽管Pandas也十分友好的提供了I/O接口。

taxidata.to_excel("t0401.xlsx",encoding="utf-8")

taxidata_from_excel = pd.read_excel("t0401.xlsx",header=0, encoding="utf-8")

taxidata_from_excel

注意:当你的xls文件行数很多超过65536时,就会遇到错误,解决办法是将写入的格式变为xlsx。excel函数受限制问题

唯一重要的参数:sheetname=k,标志着一个excel的第k个sheet页将会被取出。(从0开始)

1.3 半结构化数据

JSON:网络传输中常⽤的⼀种数据格式。

仔细看一下,实际上这就是我们平时收集到异源数据的风格是一致的:

列名不能完全匹配

key可能并不唯一

元数据被保存在数据里

import json

json_data = [{"name":"Wang","sal":50000,"job":"VP"},

 {"name":"Zhang","job":"Manager","report":"VP"},

 {"name":"Li","sal":5000,"report":"IT"}]

data_employee = pd.read_json(json.dumps(json_data))

data_employee_ri = data_employee.reindex(columns=["name","job","sal","report"])

data_employee_ri

输出结果:

二. 深入Pandas数据操纵

在前面部分的基础上,数据会有更多种操纵方式:

通过列名、行index来取数据,结合ix、iloc灵活的获取数据的一个子集(第一部分已经介绍)

按记录拼接(就像Union All)或者关联(join)

方便的统计函数与⾃定义函数映射

排序

缺失值处理

与Excel一样灵活的数据透视表(在第四部分更详细介绍)

2.1 数据集整合 2.1.1 横向拼接:直接DataFrame
pd.DataFrame([np.random.rand(2),np.random.rand(2),np.random.rand(2)],columns=["C1","C2"])
2.1.2 横向拼接:Concatenate
pd.concat([data_employee_ri,data_employee_ri,data_employee_ri])

输出结果

2.1.3 纵向拼接:Merge

根据数据列关联,使用on关键字

可以指定一列或多列

可以使⽤left_on和right_on

pd.merge(data_employee_ri,data_employee_ri,on="name")

根据index关联,可以直接使用left_index和right_index

TIPS: 增加how关键字,并指定

how = "inner"

how = "left"

how = "right"

how = "outer"

结合how,可以看到merge基本再现了SQL应有的功能,并保持代码整洁

2.2 自定义函数映射
dataNumPy32 = np.asarray([("Japan","Tokyo",4000),("S.Korea","Seoul",1300),("China","Beijing",9100)])

DF32 = pd.DataFrame(dataNumPy32,columns=["nation","capital","GDP"])

DF32

2.2.1 map: 以相同规则将1列数据作1个映射,也就是进行相同函数的处理
def GDP_Factorize(v):

    fv = np.float64(v)

    if fv > 6000.0:

         return "High"

    elif fv < 2000.0:

         return "Low"

    else:

         return "Medium"



DF32["GDP_Level"] = DF32["GDP"].map(GDP_Factorize)

DF32["NATION"] = DF32.nation.map(str.upper)

DF32

2.3 排序

sort: 按⼀列或者多列的值进行行级排序

sort_index: 根据index⾥的取值进行排序,而且可以根据axis决定是重排行还是列

2.3.1 sort
dataNumPy33 = np.asarray([("Japan","Tokyo",4000),("S.Korea","Seoul",1300),("China","Beijing",9100)])

DF33 = pd.DataFrame(dataNumPy33,columns=["nation","capital","GDP"])

DF33

DF33.sort(["capital","nation"],ascending=False)

ascending是降序的意思。

2.3.2 sort_index
DF33.sort_index(axis=1,ascending=True)

2.3.3 一个好用的功能:Rank
DF33.rank()

2.4 缺失数据处理

2.4.1 忽略缺失值:
DF34.mean(skipna=True)

不忽略缺失值的话,估计就不能计算均值了吧。

如果不想忽略缺失值的话,就需要祭出fillna了:

注:这里我在猜想,axis=1是不是就代表从的角度呢?还是得多读书查资料呀。

三. “一组”大熊猫:Pandas的groupby

groupby的功能类似SQL的group by关键字:

Split-Apply-Combine

Split,就是按照规则分组

Apply,通过⼀定的agg函数来获得输⼊pd.Series返回⼀个值的效果

Combine,把结果收集起来

Pandas的groupby的灵活性:

分组的关键字可以来⾃于index,也可以来⾃于真实的列数据

分组规则可以通过⼀列或者多列

没有具体数据,截图看一下吧,方便日后回忆。

分组可以快速实现MapReduce的逻辑

Map: 指定分组的列标签,不同的值就会被扔到不同的分组处理

Reduce: 输入多个值,返回1个值,一般可以通过agg实现,agg能接受1个函数

参考:

S1EP3_Pandas.pdf 不知道什么时候存到电脑里的资料,今天发现了它。感谢作者的资料。

Python数据分析入门之pandas总结基础(一)

欢迎来Michael翔的博客查看完成版。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/37698.html

相关文章

  • 首次公开,整理12年积累的博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • Python数据分析入门pandas总结基础(一)

    摘要:整个序列级别的元数据信息当数据序列以及本身有了名字,就可以更方便的进行后续的数据关联啦这里我感觉就是列名的作用。数据分析入门之总结基础二欢迎来翔的博客查看完成版。 一. Series Series: pandas的长枪(数据表中的一列或一行,观测向量,一维数组...) Series1 = pd.Series(np.random.randn(4)) print Series1,typ...

    alanoddsoff 评论0 收藏0
  • 【精华分享】:转行数据分析的一份学习清单

    摘要:数据分析的发展方向一般有商业方向,行业分析业务方向,和机器学习数据挖掘方向。机器学习的书籍推荐统计学习方法,机器学习,机器学习实战三本书。 作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 上一篇主要分享了博主亲身转行数据分析的经历: 【从零学起到成功转行数据分析,我是怎么做的?】 本篇继上一篇将分享转行数据分析的一些经验和学习方法,看完这篇你将会解...

    suemi 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<