摘要:一大熊猫世界来去自如的老生常谈,从基础来看,我们仍然关心对于与外部数据是如何交互的。函数受限制问题唯一重要的参数,标志着一个的第个页将会被取出。数据分析入门之总结基础一欢迎来翔的博客查看完成版。
一.大熊猫世界来去自如: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 横向拼接:直接DataFramepd.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"]) DF322.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) DF322.3 排序
sort: 按⼀列或者多列的值进行行级排序
sort_index: 根据index⾥的取值进行排序,而且可以根据axis决定是重排行还是列
2.3.1 sortdataNumPy33 = 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_indexDF33.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的groupbygroupby的功能类似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
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
摘要:整个序列级别的元数据信息当数据序列以及本身有了名字,就可以更方便的进行后续的数据关联啦这里我感觉就是列名的作用。数据分析入门之总结基础二欢迎来翔的博客查看完成版。 一. Series Series: pandas的长枪(数据表中的一列或一行,观测向量,一维数组...) Series1 = pd.Series(np.random.randn(4)) print Series1,typ...
摘要:数据分析的发展方向一般有商业方向,行业分析业务方向,和机器学习数据挖掘方向。机器学习的书籍推荐统计学习方法,机器学习,机器学习实战三本书。 作者:xiaoyu 微信公众号:Python数据科学 知乎:python数据分析师 上一篇主要分享了博主亲身转行数据分析的经历: 【从零学起到成功转行数据分析,我是怎么做的?】 本篇继上一篇将分享转行数据分析的一些经验和学习方法,看完这篇你将会解...
阅读 2261·2021-10-09 09:41
阅读 3114·2021-09-26 09:46
阅读 804·2021-09-03 10:34
阅读 3110·2021-08-11 11:22
阅读 3335·2019-08-30 14:12
阅读 685·2019-08-26 11:34
阅读 3308·2019-08-26 11:00
阅读 1694·2019-08-26 10:26