标题利用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进行数据分析(四):数据加载、存储与文件格式相关推荐

  1. python录入数据至ppt_利用Python进行数据分析之 数据加载.ppt

    利用Python进行数据分析之 数据加载 " " " " 数据加载,存储与文件格式 1,读写文本格式数据: (read_csv,read_table,read_ ...

  2. 利用Python进行数据分析1-数据加载,存储与文件格式

    目录 读取文本数据 逐块读取⽂本⽂件 将数据写出到⽂本格式 处理分隔符格式 JSON数据 XML和HTML:Web信息收集 利⽤lxml.objectify解析XML ⼆进制数据格式 使⽤HDF5格式 ...

  3. 利用Python进行数据分析:数据规整(基于DataFrame)

    利用Python进行数据分析:数据规整 在许多应用中,数据可能分散在许多文件或数据库中,存储的形式也不利于分析.本部分关注可以聚合.合并.重塑数据的方法. 文章目录 利用Python进行数据分析:数据 ...

  4. python数据分析笔记——数据加载与整理

    Python数据分析--数据加载与整理 总第47篇 ▼ (本文框架) 数据加载 导入文本数据 1.导入文本格式数据(CSV)的方法: 方法一:使用pd.read_csv(),默认打开csv文件. 9. ...

  5. 动手学数据分析——Task01_数据加载

    前言 这是一门诞生于datawhale的课程,学习它的时候搭配datawhale所配备其他资源会更好,项目地址:https://github.com/datawhalechina/hands-on-d ...

  6. python数据分析:数据载入、存储及文件格式

    """数据载入.存储及文件格式""" """ 输入和输出常用的类型:读取文本文件及硬盘上其他更高效的格式文件. ...

  7. 利用python进入数据分析之数据规整化:清理、转换、合并、重塑(二)

    数据转换 移除重复数据 In [106]: data = DataFrame({'k1': ['one'] * 3 + ['two'] * 4,'k2': [1, 1, 2, 3, 3, 4, 4]} ...

  8. 动手学数据分析task01 数据加载及探索性数据分析(笔记)

    一.数据载入及初步观察 1. 载入数据 1.1 打开JupyterLab 导入numpy.pandas 1.2 使用绝对路径.相对路径载入数据 首先,使用path1=os.path.abspath(' ...

  9. python爬取京东数据加载失败_Python爬取京东商品数据

    对京东某一商品信息页面的HTML代码进行分析,可以发现它的图书产品信息页面都含有这样一段代码(不同类的商品页面有些不同): window.pageConfig={compatible:true,sea ...

  10. python爬取京东数据加载失败_python 爬京东数据时,无法登陆。

    想使用python爬取京东的快递信息,现在需要解决的首要问题是使用python模拟浏览器登陆,遇到了下面的问题. _t _ntNBMNX ({"username":"\u ...

最新文章

  1. PDOStatement 类 FETCH_* 系列
  2. vim配置@year12
  3. IE中同一个url第二次AJAX调用无法触发onreadystatechange事件
  4. HttpWatch的Result中出现Aborted的原因分析[配图]
  5. JSF范围教程– JSF / CDI会话范围
  6. 如何在一分钟内实现微服务系统下的架构可视化
  7. Rsync结合Inotify 实时同步配置
  8. 数据同步工具otter(二)
  9. 程序设计导引及在线实践——练习记录
  10. Navicat 安装配置
  11. 【原创】龙妈的善良和软件测试的关系
  12. apache 服务器状态查看
  13. 英语流利说19秋招笔试总结
  14. noi国家集训队论文分类
  15. 求n的阶乘问题。输入一个正整数n,输出n!
  16. 基于AI的计算机视觉识别在Java项目中的使用(三) —— 搭建基于Docker的深度学习训练环境
  17. 2022山东老博会,山东养老展,中国国际养老服务业展9月举办
  18. iphone 图片等比例缩小
  19. 机器学习-5朴素贝叶斯
  20. 修改Android设备型号、版本号、去掉自定义版本显示

热门文章

  1. GOF设计模式之外观模式(结构型代理模式)
  2. python基础八:集合
  3. MATLAB散点密度图的画法三
  4. 【蓝桥杯——单片机学习笔记】十二.LCD1602(STC15F2K60S2)
  5. HDU - 1613 Ecological Bin Packing
  6. INKSCAPE (Draw freely) pdf转eps
  7. 函数返回值的优化技术(RVO和右值引用)
  8. bitbake-2-poky系统结构
  9. 如何在MySQL中实现替换字段部分内容
  10. 基于STC8的红外遥控灯