Python 数据分析4
本章概要
数据加载、存储与文件格式
数据加载、存储与文件格式
读取文本格式数据

read_csv 默认是按照逗号分割,也可设定其他分割符
df = pd.read_csv('file', sep='|')
也可以使用read_table,但是必须要指定分隔符
df = pd.read_table('examples/ex1.csv', sep=',')
一些参数设置
pd.read_csv('examples/ex2.csv', header=None)
# 一些文件没有列标题,可以设置文件头为空
pd.read_csv('examples/ex2.csv', names=['a', 'b', 'c', 'd', 'message'])
# 也可以为没有列标题的文件自定义列标题
pd.read_csv('examples/ex2.csv', names=names, index_col='message')
# 自定义的列标题中的message列放到索引位置
parsed = pd.read_csv('examples/csv_mindex.csv', index_col=['key1', 'key2'])
# 使用文件内多个列做成层次化索引
result = pd.read_table('examples/ex3.txt', sep='\s+')
# 有些时候表格不是按照固定的分割符去分割字段的,可以在分隔符参数传入正则表达式 这里的\s+表示的是匹配空格符,空格,制表符,换页符
pd.read_csv('examples/ex4.csv', skiprows=[0, 2, 3])
# 有些文件可能会有一些注释,描述性文字在文件头,可以通过skiprows参数跳过指定行
result = pd.read_csv('examples/ex5.csv')
pd.isnull(result)
# 判断dataframe里面的每个值是否为空,在值的位置返回布尔值
result = pd.read_csv('examples/ex5.csv', na_values=['NULL'])
# 可以接受列表来表示缺失值的字符串
sentinels = {'message': ['foo', 'NA'], 'something': ['two']}
pd.read_csv('examples/ex5.csv', na_values=sentinels)
# 可以用字典为指定列定制不同的NA标记值



逐块读取文本文件
在处理大文件时,可能只是想读取文件的一小部分或逐块对文件进行迭代。
pd.options.display.max_rows = 10
设置大文件的dataframe显示10行,前5后5
pd.read_csv('examples/ex6.csv', nrows=5)
# 只读取5行
chunker = pd.read_csv('ch06/ex6.csv', chunksize=1000)
chunker
<pandas.io.parsers.TextParser at 0x8368250>
# read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代。
chunker = pd.read_csv('examples/ex6.csv', chunksize=1000)
tot = Series([])
for piece in chunker:
tot = tot.add(piece['key'].value_counts(), fill_value=0)
tot = tot.sort_values(ascending=False)
# 我们可以迭代处理ex6.csv,将值计数聚合到"key"列中
数据写出到文本格式
data = pd.read_csv('test/ex5.csv')
# 读取文件到dataframe
data.to_csv('test/out.csv')
# 将数据写入文件,默认逗号分割
data.to_csv(sys.stdout, sep='|')
# 也可以设定分隔符
data.to_csv(sys.stdout, na_rep='NULL')
# 缺失值在输出结果中会被表示为空字符串
data.to_csv(sys.stdout, index=False, header=False)
#可以禁用行列索引
data.to_csv(sys.stdout, index=False, columns=['a', 'b', 'c'])
# 还可以指定写入你需要的列,并按顺序排列
series.to_csv('examples/tseries.csv')
# series也有写如的to_csv方法
处理分隔符格式
大部分存储在磁盘上的表格型数据都能用pandas.read_table进行加载。然而,有时还是需要做一些手工处理。由于接收到含有畸形行的文件而使read_table出毛病的情况并不少见。为了说明这些基本工具,看看下面这个简单的CSV文件:
In [1]: !cat examples/ex7.csv
"a","b","c"
"","",""
"","",""
对于任意单字符分隔符文件,可以直接使用内置的csv模块,将任意已打开的文件或文件型的对象传给csv.reader
import csv
f = open('examples/ex7.csv')
reader = csv.reader(f)
In [2]: for line in reader:
....: print(line)
['a', 'b', 'c']
['', '', '']
['', '', '']
现在,为了使数据格式合乎要求,你需要对其做一些整理工作。我们一步一步来做。首先,读取文件到一个多行的列表中:
In [3]: with open('examples/ex7.csv') as f:
....: lines = list(csv.reader(f))
然后,我们将这些行分为标题行和数据行:
In [4]: header, values = lines[0], lines[1:]
然后,我们可以用字典构造式和zip(*values),后者将行转置为列,创建数据列的字典:
In [5]: data_dict = {h: v for h, v in zip(header, zip(*values))}
In [6]: data_dict
Out[7]: {'a': ('', ''), 'b': ('', ''), 'c': ('', '')}
CSV文件的形式有很多。只需定义csv.Dialect的一个子类即可定义出新格式(如专门的分隔符、字符串引用约定、行结束符等):
class my_dialect(csv.Dialect):
lineterminator = '\n'
delimiter = ';'
quotechar = '"'
quoting = csv.QUOTE_MINIMAL
reader = csv.reader(f, dialect=my_dialect)
各个CSV语支的参数也可以用关键字的形式提供给csv.reader,而无需定义子类:
reader = csv.reader(f, delimiter='|')

要手工输出分隔符文件,你可以使用csv.writer。它接受一个已打开且可写的文件对象以及跟csv.reader相同的那些语支和格式化选项:
with open('mydata.csv', 'w') as f:
writer = csv.writer(f, dialect=my_dialect)
writer.writerow(('one', 'two', 'three'))
writer.writerow(('', '', ''))
writer.writerow(('', '', ''))
writer.writerow(('', '', ''))
其他格式的数据读取
https://www.jianshu.com/p/047d8c1c7e14,有需求的时候看一下就好了,没必要太关注
Python 数据分析4的更多相关文章
- [Python数据分析]新股破板买入,赚钱几率如何?
这是本人一直比较好奇的问题,网上没搜到,最近在看python数据分析,正好自己动手做一下试试.作者对于python是零基础,需要从头学起. 在写本文时,作者也没有完成这个小分析目标,边学边做吧. == ...
- 【Python数据分析】Python3多线程并发网络爬虫-以豆瓣图书Top250为例
基于上两篇文章的工作 [Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 [Python数据分析]Python3操作Excel(二) 一些问题的解决与优化 已经正确地实现 ...
- 【Python数据分析】Python3操作Excel(二) 一些问题的解决与优化
继上一篇[Python数据分析]Python3操作Excel-以豆瓣图书Top250为例 对豆瓣图书Top250进行爬取以后,鉴于还有一些问题没有解决,所以进行了进一步的交流讨论,这期间得到了一只尼玛 ...
- 【搬砖】【Python数据分析】Pycharm中plot绘图不能显示出来
最近在看<Python数据分析>这本书,而自己写代码一直用的是Pycharm,在练习的时候就碰到了plot()绘图不能显示出来的问题.网上翻了一下找到知乎上一篇回答,试了一下好像不行,而且 ...
- Python 数据分析(二 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识
Python 数据分析(二) 本实验将学习利用 Python 数据聚合与分组运算,时间序列,金融与经济数据应用等相关知识 第1节 groupby 技术 第2节 数据聚合 第3节 分组级运算和转换 第4 ...
- Python数据分析(二): Numpy技巧 (1/4)
In [1]: import numpy numpy.__version__ Out[1]: '1.13.1' In [2]: import numpy as np
- Python数据分析(二): Numpy技巧 (2/4)
numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性. 昨天晚上发了第一 ...
- Python数据分析(二): Numpy技巧 (3/4)
numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性. 昨天晚上发了第一 ...
- Python数据分析(二): Numpy技巧 (4/4)
numpy.pandas.matplotlib(+seaborn)是python数据分析/机器学习的基本工具. numpy的内容特别丰富,我这里只能介绍一下比较常见的方法和属性. 第一部分: ht ...
- 【读书笔记与思考】《python数据分析与挖掘实战》-张良均
[读书笔记与思考]<python数据分析与挖掘实战>-张良均 最近看一些机器学习相关书籍,主要是为了拓宽视野.在阅读这本书前最吸引我的地方是实战篇,我通读全书后给我印象最深的还是实战篇.基 ...
随机推荐
- Redis进阶之使用Lua脚本开发
1.在Redis中使用Lua 在Redis中执行Lua脚本有两种方法:eval和evalsha. (1)eval eval 脚本内容 key个数 key列表 参数列表 下面例子使用了key列表和参数列 ...
- HTTP 1.1状态代码及其含义说明
100 Continue 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) 101 Switching Protocols 服务器将遵从客户的请求转换到另外一种协 ...
- Educational Codeforces Round 61 (Rated for Div. 2)-C. Painting the Fence 前缀和优化
题意就是给出多个区间,要求去掉两个区间,使得剩下的区间覆盖范围最大. 当然比赛的时候还是没能做出来,不得不佩服大佬的各种姿势. 当时我想的是用线段树维护区间和,然后用单点判0,维护区间间断个数.然后打 ...
- 软工+C(5): 工具和结构化(重构中, part 1...)
// 上一篇:Alpha/Beta换人 // 下一篇:最近发展区/脚手架 目录: ** 0x01 讨论:工具/轮子 ** 0x02 讨论:结构/演进 ** 0x03 讨论:行为/活动 ** 0x04 ...
- JSON获取地址
JSON获取地址一: https://github.com/stleary/JSON-java JSON获取地址二: http://genson.io/ JSON获取地址一: https://code ...
- AOP - 1 基本概念
1.AOP (面向切面编程) AOP,Aspect Oriented Programming,意为:面向切面编程, 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术, AOP是OOP的 ...
- .net使用SqlBulkCopy类操作DataTable批量插入数据库数据,然后分页查询坑
在使用SqlBulkCopy类操作DataTable批量插入数据,这种操作插入数据的效率很高,就会导致每一条数据在保存的时间基本一样,在我们分页查询添加的数据是,使用数据的添加时间来排序就会出现每页的 ...
- Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock32 error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; Unknown error"
今天安装完带图形界面的CentOS 7后,在Terminal中运行yum安装命令时报了以下错误: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
- SpringBoot:Invalid character found in method name. HTTP method names must be tokens
问题背景 关于SpringBoot应用挂了很久之后,会发生Invalid character found in method name. HTTP method names must be token ...
- CMakeList.txt设置OpenCv路径
源文件imageBasics.cpp #include <iostream> #include <chrono> using namespace std; #include & ...