# -*-  coding:utf-8 -*-
'''
CSV 常用API 1)reader(csvfile[, dialect='excel'][, fmtparam]),主要用于CSV 文件的读取,返回一个
reader 对象用于在CSV 文件内容上进行行迭代。
参数:
csvfile,需要是支持迭代(Iterator)的对象,通常对文件(file)对象或者列表(list)对象都是适用的,并且每次调用next() 方法的返回值是字符串(string);
dialect 的默认值为excel,与excel 兼容;
fmtparam 是一系列参数列表,主要用于需要覆盖默认的Dialect设置的情形 2)csv.writer(csvfile, dialect='excel', **fmtparams),用于写入CSV 文件。 with open('data.csv', 'wb') as csvfile:
csvwriter = csv.writer(csvfile, dialect='excel',delimiter="|",quotechar='"',
quoting=csv.QUOTE_MINIMAL)
csvwriter .writerow(["1/3/09 14:44","'Product1'","1200''","Visa","Gouya"])
# 写入行
输出形式为: 1/3/09 14:44|'Product1'|1200''|Visa|Gouya 3)csv.DictReader(csvfile, fieldnames=None, restkey=None, restval=None,
dialect='excel',*args, **kwds),同reader() 方法类似,不同的是将读入的信息映射到一个字典中去,其中字
典的key 由fieldnames 指定,该值省略的话将使用CSV 文件第一行的数据作为key 值。如果
读入行的字段的个数大于filednames 中指定的个数,多余的字段名将会存放在restkey 中,而
restval 主要用于当读取行的域的个数小于fieldnames 的时候,它的值将会被用作剩下的key对应的值。 4)csv.DictWriter(csvfile, fieldnames, restval='', extrasaction='raise',
dialect='excel', *args,**kwds),用于支持字典的写入。 '''
import csv
#DictWriter
with open('C:\\test.csv', 'wb') as csv_file:
# 设置列名称
FIELDS = ['Transaction_date', 'Product', 'Price', 'Payment_Type']
writer = csv.DictWriter(csv_file, fieldnames=FIELDS)
# 写入列名称
writer.writerow(dict(zip(FIELDS, FIELDS)))
d = {'Transaction_date':'1/2/09 6:17','Product':'Product1','Price':'',\
'Payment_Type':'Mastercard'}
# 写入一行
writer.writerow(d) with open('C:\\test.csv', 'rb') as csv_file:
for d in csv.DictReader(csv_file):
print d '''
Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,,它
不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV、HDF5、HTML 等,
能够提供高效的大型数据处理。其支持的两种数据结构——Series 和DataFrame——是数据处
理的基础。下面先来介绍这两种数据结构。 Series:它是一种类似数组的带索引的一维数据结构,支持的类型与NumPy 兼容。如
果不指定索引,默认为0 到N-1。通过obj.values() 和obj.index() 可以分别获取值和索
引。当给Series 传递一个字典的时候,Series 的索引将根据字典中的键排序。如果传
入字典的时候同时重新指定了index 参数,当index 与字典中的键不匹配的时候,会
出现时数据丢失的情况,标记为NaN。 import pandas
#在pandas 中用函数isnull() 和notnull() 来检测数据是否丢失。 >>> obj1 = Series([1, 'a', (1,2), 3], index=['a', 'b', 'c', 'd'])
>>> obj1#value 和index 一一匹配
a 1
b a
c (1, 2)
d 3
dtype: object
>>> obj2=Series({"Book":"Python","Author":"Dan","ISBN":"011334","Price":25},inde
x=['book','Author','ISBM','Price'])
>>> obj2.isnull()
book True # 指定的index 与字典的键不匹配,发生数据丢失
Author False
ISBM True # 指定的index 与字典的键不匹配,发生数据丢失
Price False
dtype: bool ‰DataFrame :类似于电子表格,其数据为排好序的数据列的集合,每一列都可以是
不同的数据类型,它类似于一个二维数据结构,支持行和列的索引。和Series 一
样,索引会自动分配并且能根据指定的列进行排序。使用最多的方式是通过一个长
度相等的列表的字典来构建。构建一个DataFrame 最常用的方式是用一个相等长度
列表的字典或NumPy 数组。DataFrame 也可以通过columns 指定序列的顺序进行
排序。 >>> data = {'OrderDate': ['1-6-10', '1-23-10', '2-9-10', '2-26-10', '3-15-10'],
... 'Region': ['East', 'Central', 'Central', 'West', 'E ast'],
... 'Rep': ['Jones', 'Kivell', 'Jardine', 'Gill', 'Sorv ino']}
>>>
>>> DataFrame(data,columns=['OrderDate','Region','Rep'])# 通过字典构建,按照cloumns 指定的顺序排序
OrderDate Region Rep
0 1-6-10 East Jones
1 1-23-10 Central Kivell
2 2-9-10 Central Jardine
3 2-26-10 West Gill
4 3-15-10 East Sorvino #Pandas 中处理CSV 文件的函数主要为read_csv() 和to_csv() 这两个,其中read_csv() 读取CSV 文件的内容并返回DataFrame,to_csv() 则是其逆过程。 1)指定读取部分列和文件的行数。具体的实现代码如下:
df = pd.read_csv("SampleData.csv",nrows=5,usecols=['OrderDate','Item','Total']) 方法read_csv() 的参数nrows 指定读取文件的行数,usecols 指定所要读取的列的列名,
如果没有列名,可直接使用索引0、1、...、n-1。上述两个参数对大文件处理非常有用,可
以避免读入整个文件而只选取所需要部分进行读取 2)设置CSV 文件与excel 兼容。dialect 参数可以是string 也可以是csv.Dialect 的实例。
如果将图4-2 所示的文件格式改为使用“ |”分隔符,则需要设置dialect 相关的参数。error_
bad_lines 设置为False,当记录不符合要求的时候,如记录所包含的列数与文件列设置不相
等时可以直接忽略这些列。下面的代码用于设置CSV 文件与excel 兼容,其中分隔符为“| ”,
而error_bad_lines=False 会直接忽略不符合要求的记录。 >>> dia = csv.excel()
>>> dia.delimiter="|" #设置分隔符
>>> pd.read_csv("SD.csv")
OrderDate|Region|Rep|Item|Units|Unit Cost|Total
0 1-6-10|East|Jones|Pencil|95|1.99 |189.05
1 1-23-10|Central|Kivell|Binder|50|19.99 |999.50...
>>> pd.read_csv("SD.csv",dialect = dia,error_bad_lines=False)
Skipping line 3: expected 7 fields, saw 10 # 所有不符合格式要求的列将直接忽略
OrderDate Region Rep Item Units Unit Cost Total
0 1-6-10 East Jones Pencil 95 1.99 189.05 3)对文件进行分块处理并返回一个可迭代的对象。分块处理可以避免将所有的文件载入
内存,仅在使用的时候读入所需内容。参数chunksize 设置分块的文件行数,10 表示每一块
包含10 个记录。将参数iterator 设置为True 时,返回值为TextFileReader,它是一个可迭代对
象。来看下面的例子,当chunksize=10、iterator=True 时,每次输出为包含10 个记录的块。
>>> reader = pd.read_table("SampleData.csv",chunksize=10,iterator=True)
>>> reader
<pandas.io.parsers.TextFileReader object at 0x0314BE70>
>>> iter(reader).next() # 将TextFileReader 转换为迭代器并调用next 方法
OrderDate,Region,Rep,Item,Units,Unit Cost,Total # 每次读入10 行
0 1-6-10,East,Jones,Pencil,95, 1.99 , 189.05
1 1-23-10,Central,Kivell,Binder,50, 19.99 , 999.50
2 2-9-10,Central,Jardine,Pencil,36, 4.99 , 179.64
3 2-26-10,Central,Gill,Pen,27, 19.99 , 539.73
4 3-15-10,West,Sorvino,Pencil,56, 2.99 , 167.44
5 4-1-10,East,Jones,Binder,60, 4.99 , 299.40
6 4-18-10,Central,Andrews,Pencil,75, 1.99 , 149.25
7 5-5-10,Central,Jardine,Pencil,90, 4.99 , 449.10
8 5-22-10,West,Thompson,Pencil,32, 1.99 , 63.68 4)当文件格式相似的时候,支持多个文件合并处理。以下例子用于将3 个格式相同的
文件进行合并处理。 >>> filelst = os.listdir("test")
>>> print filelst # 同时存在3 个格式相同的文件
['s1.csv', 's2.csv', 's3.csv']
>>> os.chdir("test")
>>> dfs =[pd.read_csv(f) for f in filelst]
>>> total_df = pd.concat(dfs) # 将文件合并
>>> total_df
OrderDate Region Rep Item Units Unit Cost Total
0 1-6-10 East Jones Pencil 95 1.99 189.05
1 1-23-10 Central Kivell Binder 50 19.99 999.5 '''

最新文章

  1. ajex请求的数据 什么时候需用Json.parse()
  2. Android Saving Data(二)
  3. Sparse Matrix Multiplication
  4. spring boot servlet、filter、listener
  5. lucene如何通过docId快速查找field字段以及最近距离等信息?
  6. sublimeText插件推荐
  7. Easyui Combotree问题及其相关
  8. dynamic介绍
  9. response返回随笔
  10. java_UML:继承/泛化、实现、依赖、关联、聚合、组合的联系与区别 (2016-07-12)
  11. U8800安装软件显示无效的URI问题
  12. QT直接支持GB18030,附它对此编码的一堆相关文档描述
  13. Table隔行变色的JavaScript代码
  14. Matlab将三维变量分割为多个二维变量的方法
  15. Python3处理配置文件
  16. node上传文件并在网页中展示
  17. C# 中ref与out关键字区别
  18. 安卓视频播放器(VideoView)
  19. linux调度器源码分析 - 概述(一)
  20. 【tools】vim删除命令

热门文章

  1. 关于PHP.INI中的错误ERROR报告级别设置
  2. Spring MVC列表多选框
  3. 怎么获取Android应用程序的上下文
  4. centos7 更换yum源为阿里云
  5. 如何通过PHP判断年份是否是闰年----两种方法
  6. 《从零开始学Swift》学习笔记(Day 19)——函数参数传递
  7. 1084 矩阵取数问题 V2
  8. EasyNVR摄像机网页无插件直播使用过程中问题的自我排查-设备不在线问题的自我排查
  9. window.XMLHttpRequest对象详解
  10. coursera 《现代操作系统》 -- 第五周 同步机制(1)