利用Python进行数据分析(四):数据加载、存储与文件格式
标题利用Python进行数据分析(四):数据加载、存储与文件格式
学习笔记来源于:简书https://www.jianshu.com/p/047d8c1c7e14
输入输出通常可以划分为几个大类:读取文本文件和其他更高效的磁盘存储格式,加载数据库中的数据,利用Web API操作网络资源。
一、读写文本格式的数据
1、pandas提供了一些用于将表格型数据读取为DataFrame对象的函数。下表对它们进行了总结,其中read_csv和read_table可能会是今后用得最多的。
这些函数的选项可以划分为以下几个大类:
索引:将一个或多个列当做返回的DataFrame处理,以及是否从文件、用户获取列名。
类型推断和数据转换:包括用户定义值的转换、和自定义的缺失值标记列表等。
日期解析:包括组合功能,比如将分散在多个列中的日期时间信息组合成结果中的单个列。
迭代:支持对大文件进行逐块迭代。
不规整数据问题:跳过一些行、页脚、注释或其他一些不重要的东西(比如由成千上万个逗号隔开的数值数据)。
首先我们来看一个以逗号分隔的(CSV)文本文件:
import matplotlib as mpl
import pandas as pd
import numpy as np
data=pd.read_csv("example.csv")
print(data)
输出结果为:
我们还可以使用read_table,并指定分隔符:
data1=pd.read_table("example.csv",sep=",")
print(data1)
并不是所以文件都有标题行。
data=pd.read_csv("example1.csv",header=None)
读入该文件的办法有两个。你可以让pandas为其分配默认的列名,也可以自己定义列名:
data1=pd.read_csv("example1.csv",names=["a","b","c","d","message"])
假设你希望将message列做成DataFrame的索引。你可以明确表示要将该列放到索引4的位置上,也可以通过index_col参数指定"message":
name=["a","b","c","d","message"]
data1=pd.read_csv("example1.csv",names=name,index_col="message")
如果希望将多个列做成一个层次化索引,只需传入由列编号或列名组成的列表即可:
data=pd.read_csv("example2.csv",index_col=["key1","key2"])
标题2、处理异性数据
比如数据如下,我们不需要第1、3、4行,所以用skiprows跳过不需要的行。
data=pd.read_csv("example3.csv",skiprows=[0,2,3])
3、缺失值处理
缺失值处理是文件解析任务中的一个重要组成部分。缺失数据经常是要么没有(空字符串),要么用某个标记值表示。默认情况下,pandas会用一组经常出现的标记值进行识别,比如NA及NULL:
csv文件
data2=pd.read_csv("example4.csv")
print(data2)
print(pd.isnull(data2))
na_values可以用一个列表或集合的字符串表示缺失值(把原来的值设置为na):
(1)用字典
tempt={"message":['foo','world'],"something":['one','three']}
data2=pd.read_csv("example4.csv",na_values=tempt)
(2)用列表
data2=pd.read_csv("example4.csv",na_values=['two'])
4、read_csv和read_table函数的参数
5、逐块读取文本文件
在看大文件之前,我们先设置pandas显示地更紧些:
pd.options.display.max_rows=10
data=pd.read_csv('examples/ex6.csv')
print(data)
如果只想读取几行(避免读取整个文件),通过nrows进行指定即可:
data=pd.read_csv('examples/ex6.csv',nrows=6)
要逐块读取文件,可以指定chunksize(行数):
chunker = pd.read_csv('examples/ex6.csv',chunksize=10000)
print(chunker)
read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代。比如说,我们可以迭代处理ex6.csv,将值计数聚合到"key"列中,如下所示:
chunker = pd.read_csv('examples/ex6.csv',chunksize=10000)
print(chunker)
tot = pd.Series([])
for piece in chunker:tot = tot.add(piece['key'].value_counts(), fill_value=0)tot = tot.sort_values(ascending=False)
print(tot[:10])
TextParser还有一个get_chunk方法,它使你可以读取任意大小的块。
二、将数据写出到文本格式
数据也可以被输出为分隔符格式的文本。我们再来看看之前读过的一个CSV文件:
利用DataFrame的to_csv方法,我们可以将数据写到一个以逗号分隔的文件中:
data = pd.read_csv('examples/ex5.csv')
data.to_csv('examples/out.csv')
data1 = pd.read_csv('examples/out.csv')
还可以使用其他分隔符(由于这里直接写出到sys.stdout,所以仅仅是打印出文本结果而已):
data = pd.read_csv('examples/ex5.csv')
data.to_csv(sys.stdout, sep="|")
缺失值在输出结果中会被表示为空字符串。你可能希望将其表示为别的标记值:
data = pd.read_csv('examples/ex5.csv')
data.to_csv(sys.stdout, na_rep="NULL")
如果没有设置其他选项,则会写出行和列的标签。当然,它们也都可以被禁用:
data.to_csv(sys.stdout, na_rep="NULL",index=False,header=False)
此外,你还可以只写出一部分的列,并以你指定的顺序排列:
data.to_csv(sys.stdout, na_rep="NULL",index=False,columns=['a','b','c'])
Series也有一个to_csv方法:
dates = pd.date_range('1/1/2000',periods=7)
ts = pd.Series(np.arange(7),index=dates)
ts.to_csv('examples/tseries.csv')
print(pd.read_csv('examples/tseries.csv
三、处理分隔符格式
大部分存储在磁盘上的表格型数据都能用pandas.read_table进行加载。
对于任何单字符分隔符文件,可以直接使用Python内置的csv模块。将任意已打开的文件或文件型的对象传给csv.reader:
对这个reader进行迭代将会为每行产生一个元组(并移除了所有的引号):对这个reader进行迭代将会为每行产生一个元组(并移除了所有的引号):
import csv
f = open('examples/ex7.csv')
reader = csv.reader(f)
for line in reader:print(line)
现在,为了使数据格式合乎要求,你需要对其做一些整理工作。我们一步一步来做。首先,读取文件到一个多行的列表中:
with open('examples/ex7.csv') as f:lines = list(csv.reader(f))
然后,我们将这些行分为标题行和数据行:
header,values = lines[0],lines[1:]
然后,我们可以用字典构造式和zip(*values),后者将行转置为列,创建数据列的字典:
data_dict = {h:v for h,v in zip(header,zip(*values))}
print(data_dict)
四、JSON数据
JSON(JavaScript Object Notation的简称)已经成为通过HTTP请求在Web浏览器和其他应用程序之间发送数据的标准格式之一。它是一种比表格型文本格式(如CSV)灵活得多的数据格式。下面是一个例子:
(插播:安装JSON模块)
在https://www.lfd.uci.edu/~gohlke/pythonlibs/#simplejson下载对应的simplejson的whl文件,并将文件放入安装python路径的scripts文件夹下
打开命令行提示符pip install whl 文件
安装成功
import simplejson
import simplejson
obj = """
{"name": "Wes","places_lived": ["United States", "Spain", "Germany"],"pet": null,"siblings": [{"name": "Scott", "age": 30, "pets": ["Zeus", "Zuko"]},{"name": "Katie", "age": 38,"pets": ["Sixes", "Stache", "Cisco"]}]
}
"""
result = simplejson.loads(obj)
print(result)
其中obj是json格式,通过json.loads即可将JSON字符串转换成Python形式。
json.dumps则将Python对象转换成JSON格式:
data2 = simplejson.dump(result)
如何将(一个或一组)JSON对象转换为DataFrame或其他便于分析的数据结构就由你决定了。最简单方便的方式是:向DataFrame构造器传入一个字典的列表(就是原先的JSON对象),并选取数据字段的子集:
siblings = pd.DataFrame(result['siblings'],columns=['name','age'])
print(siblings)
pandas.read_json可以自动将特别格式的JSON数据集转换为Series或DataFrame。例如:
五、XML和HTML:Web信息收集
利用Python进行数据分析(四):数据加载、存储与文件格式相关推荐
- python录入数据至ppt_利用Python进行数据分析之 数据加载.ppt
利用Python进行数据分析之 数据加载 " " " " 数据加载,存储与文件格式 1,读写文本格式数据: (read_csv,read_table,read_ ...
- 利用Python进行数据分析1-数据加载,存储与文件格式
目录 读取文本数据 逐块读取⽂本⽂件 将数据写出到⽂本格式 处理分隔符格式 JSON数据 XML和HTML:Web信息收集 利⽤lxml.objectify解析XML ⼆进制数据格式 使⽤HDF5格式 ...
- 利用Python进行数据分析:数据规整(基于DataFrame)
利用Python进行数据分析:数据规整 在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 文章目录 利用Python进行数据分析:数据 ...
- python数据分析笔记——数据加载与整理
Python数据分析--数据加载与整理 总第47篇 ▼ (本文框架) 数据加载 导入文本数据 1.导入文本格式数据(CSV)的方法: 方法一:使用pd.read_csv(),默认打开csv文件. 9. ...
- 动手学数据分析——Task01_数据加载
前言 这是一门诞生于datawhale的课程,学习它的时候搭配datawhale所配备其他资源会更好,项目地址:https://github.com/datawhalechina/hands-on-d ...
- python数据分析:数据载入、存储及文件格式
"""数据载入.存储及文件格式""" """ 输入和输出常用的类型:读取文本文件及硬盘上其他更高效的格式文件. ...
- 利用python进入数据分析之数据规整化:清理、转换、合并、重塑(二)
数据转换 移除重复数据 In [106]: data = DataFrame({'k1': ['one'] * 3 + ['two'] * 4,'k2': [1, 1, 2, 3, 3, 4, 4]} ...
- 动手学数据分析task01 数据加载及探索性数据分析(笔记)
一.数据载入及初步观察 1. 载入数据 1.1 打开JupyterLab 导入numpy.pandas 1.2 使用绝对路径.相对路径载入数据 首先,使用path1=os.path.abspath(' ...
- python爬取京东数据加载失败_Python爬取京东商品数据
对京东某一商品信息页面的HTML代码进行分析,可以发现它的图书产品信息页面都含有这样一段代码(不同类的商品页面有些不同): window.pageConfig={compatible:true,sea ...
- python爬取京东数据加载失败_python 爬京东数据时,无法登陆。
想使用python爬取京东的快递信息,现在需要解决的首要问题是使用python模拟浏览器登陆,遇到了下面的问题. _t _ntNBMNX ({"username":"\u ...
最新文章
- PDOStatement 类 FETCH_* 系列
- vim配置@year12
- IE中同一个url第二次AJAX调用无法触发onreadystatechange事件
- HttpWatch的Result中出现Aborted的原因分析[配图]
- JSF范围教程– JSF / CDI会话范围
- 如何在一分钟内实现微服务系统下的架构可视化
- Rsync结合Inotify 实时同步配置
- 数据同步工具otter(二)
- 程序设计导引及在线实践——练习记录
- Navicat 安装配置
- 【原创】龙妈的善良和软件测试的关系
- apache 服务器状态查看
- 英语流利说19秋招笔试总结
- noi国家集训队论文分类
- 求n的阶乘问题。输入一个正整数n,输出n!
- 基于AI的计算机视觉识别在Java项目中的使用(三) —— 搭建基于Docker的深度学习训练环境
- 2022山东老博会,山东养老展,中国国际养老服务业展9月举办
- iphone 图片等比例缩小
- 机器学习-5朴素贝叶斯
- 修改Android设备型号、版本号、去掉自定义版本显示