1. 首页
  2. IT资讯

数据分析从零开始实战 | 基础篇(三)

阅读文本大概需要12分钟。

零、写在前面

前面两篇文章基础篇(一)基础篇(二)讲了数据分析虚拟环境创建和pandas读写csv、tsv、json格式的数据,今天我们继续探索pandas读取数据。本系列学习笔记参考书籍:《数据分析实战》托马兹·卓巴斯

一、基本知识概要

1.利用pandas读写Excel文件2.利用pandas读写XML文件

二、开始动手动脑

1.利用Python读写Excel

读取,利用Pandas库的ExcelFile()方法。写入,利用

代码

importpandasaspdimportos#获取当前文件父目录路径father_path=os.getcwd()#原始数据文件路径rpath_excel=father_path+r'data01realEstate_trans.xlsx'#数据保存路径wpath_excel=father_path+r'data01temp_excel.xlsx#打开excel文件excel_file=pd.ExcelFile(rpath_excel)#读取文件内容"""ExcelFile对象的parse()方法读取指定工作表的内容ExcelFile对象的sheet_names属性可以获取Excel文件中的所有工作表这里还用到了字典表达式来给字典赋值(看起来更加优雅)"""excel_read={sheetName:excel_file.parse(sheetName)forsheetNameinexcel_file.sheet_names}#输出Sacramento表格的price列的头10行记录print(excel_read['Sacramento'].head(10)['price'])print(type(excel_read['Sacramento'].head(10)['price']))#遇到错误:ModuleNotFoundError:Nomodulenamed'xlrd'#写入表格的price列的前10行excel_read['Sacramento'].head(10)['price'].to_excel(wpath_excel,"price",index=False)#遇到错误:ModuleNotFoundError:Nomodulenamed'openpyxl'

读取结果:
数据分析从零开始实战 | 基础篇(三)
写入结果:
数据分析从零开始实战 | 基础篇(三)
可能报错:

读操作时:ModuleNotFoundError:Nomodulenamed'xlrd'写操作时:ModuleNotFoundError:Nomodulenamed'openpyxl'

解决方法:

#在环境里安装xlrd和openpyxl模块即可pipinstallxlrdpipinstallopenpyxl

2.利用Python读写XML文件

学过java的同学对XML应该不陌生,全称是eXtensible Markup Language(扩展标记语言),虽然平时不常见,但是Web API里支持XML编码。

读写代码

importpandasaspd#一个轻量的XML解析器importxml.etree.ElementTreeasETimportos"""读入XML数据,返回pa.DataFrame"""defread_xml(xml_FileName):withopen(xml_FileName,"r")asxml_file:#读取数据,以树的结构存储tree=ET.parse(xml_file)#访问树的梗节点root=tree.getroot()#返回DataFrame格式数据returnpd.DataFrame(list(iter_records(root)))"""遍历有记录的生成器"""defiter_records(records):forrecordinrecords:#保存值的临时字典temp_dict={}#遍历所有字段forvarinrecord:temp_dict[var.attrib["var_name"]]=var.text#生成值yieldtemp_dict"""以XML格式保存数据"""defwrite_xml(xmlFileName,data):withopen(xmlFileName,"w")asxmlFile:#写头部xmlFile.write('<?xmlversion="1.0"encoding="UTF-8"?>')xmlFile.write('<records>n')#写数据xmlFile.write('n'.join(data.apply(xml_encode,axis=1)))#写尾部xmlFile.write("n</records>")"""以特定的嵌套格式将每一行编码成XML"""defxml_encode(row):#第一步--输出record节点xmlItem=['<record>']#第二步--给行中每个字段加上XML格式<fieldname=···>···</field>forfieldinrow.index:xmlItem.append('<varvar_name="{0}">{1}</var>'.format(field,row[field]))#最后一步--标记record节点的结束标签xmlItem.append("</record>")return'n'.join(xmlItem)#获取当前文件父目录路径father_path=os.getcwd()#原始数据文件路径rpath_xml=father_path+r'data01realEstate_trans.xml'#数据保存路径wpath_xml=father_path+r'data01temp_xml.xml'#读取数据xml_read=read_xml(rpath_xml)#输出头10行记录print(xml_read.head(10))#以XML格式写回文件write_xml(wpath_xml,xml_read.head(10))

运行结果
数据分析从零开始实战 | 基础篇(三)
数据分析从零开始实战 | 基础篇(三)
代码解析

(1)read_xml(xml_FileName)函数功能:读入XML数据,返回pa.DataFrame这里利用到了一个轻量级的XML解析器:xml.etree.ElementTree。传入文件名,先读取文件内容,然后利用parse()函数解析XML,创建一个树状结构并存放在tree变量中,在tree对象上调用getroot()方法得到根节点,最后调用iter_records()函数,传入根节点,进而将返回的信息转换成DataFrame。

(2)iter_records(records)函数功能:遍历有记录的生成器iter_records()方法是一个生成器,从关键字yield可以看出来,如果你不了解生成器,可以点击这里,与return不同,生成器每次只向主调方法返回一个值,直到结束。

(3)write_xml(xmlFile, data)函数功能:以XML格式保存数据这里需要注意的是得按XML文件格式进行保存,我们要做的就是三步:保存头部格式、按格式保存数据、保存尾部格式。保存数据时用到了DataFrame对象的apply()方法,遍历内部每一行,第一个参数xml_encode指定了要应用到每一行记录上的方法,axis=1表示按行处理,默认值为0,表示按列处理。

(4)xml_encode(row)函数功能:以特定的嵌套格式将每一行编码成XML在写数据的过程我们会调用这个方法,对每行数据进行处理,变成XML格式。

三 、送你的话

昨天开了个会,然后思考了写问题,这里分享给大家:1、思想觉悟,辩证思考。不要随声附和,要有己见,聪明的人应该是坚持输出自己的思想,从事情本身和和他人评论去思考,再辩正自己的思考,再输出;

2、少喊口号,多做实事。本来我是很推崇做个人规划的,但是,我发现不止是我周边和某些读者朋友,包括我自己,规划作的越来越假大空,规划本身没有错,错的是:现实生活中我们把规划变成了日日口号,而为能如实完成,所以我现在推崇:规划,先做再说。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31556503/viewspace-2637300/,如需转载,请注明出处,否则将追究法律责任。

主题测试文章,只做测试使用。发布者:布吉卡,转转请注明出处:http://www.cxybcw.com/193551.html

联系我们

13687733322

在线咨询:点击这里给我发消息

邮件:1877088071@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code