赞
踩
提示:仅记录个人的学习心得,欢迎交流
(占位,以后再补 ……………………)
对python语言基础中记忆不牢的进行总结,希望自己能坚持下去!为了学习计算机视觉做准备!
本次介绍本书第六章的内容。关于文件的操作都是些常见的操作,阅读别人代码时可能很容易的了解功能,但是自己使用的时候往往会犯难,所以重点要掌握怎么用,能完成哪些操作,加油!
1.1 文本文件读写的基本操作
将表格型数据读取为DataFrame对象是pandas的重要特性。
csv文件就是以逗号为分隔符的文件,系统默认是以excle表格的形式打开。其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
table文件就是表格形式的数据,有三个重点:a)表格模式;b)每列必须有名字; c)不同列的数据类型可以不一样,但同一列数据类型必须一样。
我们常用的可能就是read_csv()、read_table()两个函数,通过传递这些函数中的某些参数可以实现一些特定的功能:
- import numpy as np
- import pandas as pd
- result = pd.read_csv('./ex1.csv',na_values='NULL')
- print(result)
- >>> something a b c d message
- 0 one 1 2 3.0 4 NaN
- 1 two 5 6 NaN 8 world
- 2 three 9 10 11.0 12 foo
-
- # 在字典中可以指定不同的缺失值标识
- sentinels = {'message':['foo','NA'],'something':['two']}
- print(pd.read_csv('./ex1.csv', na_values=sentinels))
- >>> something a b c d message
- 0 one 1 2 3.0 4 NaN
- 1 two 5 6 NaN 8 world
- 2 three 9 10 11.0 12 foo

如果table文件的分割符不是逗号,而实不同数量的空格时,则需要用到参数sep= ' \s+ '(这是一个正则表达式可以处理数量不同的空格为分隔符时的情况。同理sep=分隔每行的字符序列或正则表达式。
1.2 分块读入文本文件
当处理大型文件或者找出正确的参数集来正确处理大文件时,你可能需要读入文件的一个小片段或者按小块遍历文件。
- import numpy as np
- import pandas as pd
-
- pd.options.display.max_rows = 10
- result = pd.read_csv('./ex2.csv')
- print(result)
- >>> one two three four key
- 0 0.467976 -0.038649 -0.295344 -1.824726 L
- 1 -0.358893 1.404453 0.704965 -0.200638 B
- 2 -0.501840 0.659254 -0.421691 -0.057688 G
- 3 0.204886 1.074134 1.388361 -0.982404 R
- 4 0.354628 -0.133116 0.283763 -0.837063 Q
- ... ... ... ... ... ..
- 2994 0.068804 1.322759 0.802346 0.223618 0
- 2995 2.311896 -0.417070 -1.409599 -0.515821 H
- 2996 -0.479893 -0.650419 0.745152 -0.646038 U
- 2997 0.523331 0.787112 0.486066 1.093156 A
- 2998 -0.362559 0.598894 -1.843201 0.887292 Y
- [2999 rows x 5 columns]
-
- tot = pd.Series([])
- for piece in result:
- tot = tot.add(piece['key'].value_counts(), fill_value=0)
- tot = tot.sort_values(ascending=False)
- print(tot)
- >>> O 132.0
- X 116.0
- L 109.0
- F 108.0
- H 107.0
- ...
- 8 46.0
- 3 46.0
- 5 43.0
- 1 40.0
- 2 39.0
- Length: 36, dtype: float64

如果要分块读入文件,可以使用参数chunksize此时read_csv所返回的这个TextParser对象使你可以根据chunksize对文件进行逐块迭代。get_chunk(size)函数可以获取size大小的chunk(下标从0开始)。
1.3 将数据写入文本格式
主要是使用.to_csv()函数,和设定该函数的相关参数完成写入文本的目的。
参数介绍:① sep= :设置分隔符
② na_rep= :对缺失值进行标注的标识值
③ index=False, hearder=False :写入的不写入行、列的标签。
④ colums=[] :按照所给定的列表顺序写入文件
1.4 使用分隔格式
对于大多数表格类型的文件read_table()函数都可以从硬盘中读取文件。但是对于有些分隔符不规则,或者对于一行或者时多行错误的文件,read_table()函数就不起作用。对于任何带有单字符分隔符的文件,你可以使用python的内建csv模块。
- import csv
- f = open('../pydata-book-3rd-edition/examples/ex7.csv')
- reader = csv.reader(f)
- for lines in reader:
- print(lines)
- >>> ['a', 'b', 'c']
- ['1', '2', '3']
- ['1', '2', '3']
之后,就可以进行一些必要的处理,以将数据整理为需要的形式。
- import csv
- f = open('../pydata-book-3rd-edition/examples/ex7.csv')
- lines = list(csv.reader(f))
- print(lines)
- >>> [['a', 'b', 'c'], ['1', '2', '3'], ['1', '2', '3']]
-
- header, values = lines[0], lines[1:]
- data_dict = {h: v for h, v in zip(header, zip(*values))}
- print(data_dict)
- >>> {'a': ('1', '1'), 'b': ('2', '2'), 'c': ('3', '3')}
CSV文件有多种不同的风格,若果需要根据不同的分隔符、字符串引用约定或行终止符定义一种新的形式的格式时,我们可以用csv.Dialect 定义一个简单的子类;也可以不必定义子类,直接将CSV方言参数传入csv.reader的关键字参数:
- """使用csv.Dialect定义一个子类"""
- class my_dialect(csv.Dialect):
- lineterminator = '\n'
- delimiter = ';'
- quotechar = '"'
- quoting = csv.QUOTE_MINIMAL
-
- reader = csv.reader(f, dialect=my_dialect)
- print(reader)
- >>> <_csv.reader object at 0x00000144617E85E0>
-
- """直接将CSV语支参数传入csv.reader"""
- reader = csv.reader(f, delimiter='|')
- print(reader)
- >>> <_csv.reader object at 0x00000278FED185E0>
写入文件的时候可以使用csv.wirter(),这个函数可以接受的参数和csv.reader()类似。
1.5 JSON数据
Json已经成为Web浏览器和其他用用间通过HTTP请求发送数据的标准形式。比CSV等表格文本更为自由。除了它空值NULL和列表末尾不允许有逗号等一些细微差别,JSON更接近的python代码
Python中的标准库json,可以使用json.loads()方法将json对象转换为python对象, 也可以使用json.dumps()方法转换回python对象。
pandas.read_json可以自动将JSON数据集按照指定的次序转换为Series或DataFrame。pandas.read_json的默认选项是假设JSON数组中的每个对象是表里的一行。 如果要从pandas中数据导出为JSON,可以对Series和DataFrame使用to_json()方法。
- # 命令行运行
- $ cat ../pydata-book-3rd-edition/examples/example.json
- [{"a": 1, "b": 2, "c": 3},
- {"a": 4, "b": 5, "c": 6},
- {"a": 7, "b": 8, "c": 9}]
-
-
- import pandas as pd
-
- data = pd.read_json('../pydata-book-3rd-edition/examples/example.json')
- print(data)
- >>> a b c
- 0 1 2 3
- 1 4 5 6
- 2 7 8 9
-

1.6 XML和HTML:网络抓取
pandas.read_html()函数
(这部分介绍的太简单了吧,也没看懂......)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。