# -*-  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 '''

建议42:使用pandas处理大型CSV文件的更多相关文章

  1. 使用Ruby处理大型CSV文件

    处理大型文件是一种内存密集型操作,可能导致服务器耗尽RAM内存并交换到磁盘.让我们看一下使用Ruby处理CSV文件的几种方法,并测量内存消耗和速度性能. Prepare CSV data sample ...

  2. [译]使用Pandas读取大型Excel文件

    上周我参加了dataisbeautiful subreddit上的Dataviz Battle,我们不得不从TSA声明数据集创建可视化.我喜欢这种比赛,因为大多数时候你最终都会学习很多有用的东西. 这 ...

  3. Python 从大型csv文件中提取感兴趣的行

    帮妹子处理一个2.xG 大小的 csv文件,文件太大,不宜一次性读入内存,可以使用open迭代器. with open(filename,'r') as file # 按行读取 for line in ...

  4. 用pandas库对csv文件中的文本数据进行分析处理

    #数据分析 import pandas import csv old_path = r'd:\2000W\200W-400W.csv' f = open(old_path,'r',encoding=' ...

  5. 利用pandas随机切分csv文件

    把数据集随机切分为训练集和测试集 method 1: df = pd.read_csv('data/tgnb_merge.csv', encoding='utf-8') df.drop_duplica ...

  6. 使用Pandas读取大型Excel文件

    import os import pandas as pd HERE = os.path.abspath(os.path.dirname(__file__)) DATA_DIR = os.path.a ...

  7. [Python]-pandas模块-CSV文件读写

    Pandas 即Python Data Analysis Library,是为了解决数据分析而创建的第三方工具,它不仅提供了丰富的数据模型,而且支持多种文件格式处理,包括CSV.HDF5.HTML 等 ...

  8. Python之文件读写(csv文件,CSV库,Pandas库)

    前言 一.Python文件读取 二.读取CSV文件 一.Python文件读取 1. open函数是内置函数之with操作 - 关于路径设置的问题斜杠设置成D:\\文件夹\\文件或是D:/文件夹/文件 ...

  9. 109.大型的csv文件的处理方式

    HttpResponse对象将会将响应的数据作为一个整体返回,此时如果数据量非常大的话,长时间浏览器没有得到服务器的响应,就会超过默认的超时时间,返回超时.而StreamingHttpResponse ...

随机推荐

  1. 我的 Android 开发实战经验总结

    我的 Android 开发实战经验总结 字数4440 阅读5137 评论43 喜欢250 曾经一直想写一篇总结 Android 开发经验的文章,预计当时的我还达不到某种水平,所以思路跟不上,下笔又捉襟 ...

  2. openfile

    linux修改open files数   概要 linux系统默认open files数目为1024, 有时应用程序会报Too many open files的错误,是因为open files 数目不 ...

  3. AV1视频编码标准资源汇总

    一直不看好HEVC,总觉得这东西绝对不可能再恢复像h264那么辉煌了,如此高昂的授权费,被淘汰估计也就这一两年了,有必要预研一下AV1,马上进去二进制码流冻结流程了,感觉aom越来越近了,毕竟goog ...

  4. jQuery 库 - 特性

    jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操作 HTML 事件函数 JavaScript 特效和动画 HTM ...

  5. jQuery EasyUI编辑DataGrid用combobox实现多级联动

    我在项目中设计课程表的时候需要用到老师和分类之间的多级联动. 首先是一张效果图: 下面是实现的代码: <body> <script type="text/javascrip ...

  6. MathType编辑表示右上角的符号的方法

    MathType是一款公式编辑器,其中的符号种类非常的全,如果需要编辑一些专业的公式,用它非常的方便快捷.但是有些符号由于不常用,在一些模板之中使用的时候需要深入地去查找调用一下.比如表示右上角的符号 ...

  7. ASP.NET MVC 使用dataTable(3)--更多选项参考

    ASP.NET MVC 使用dataTable(3)--更多选项参考 jQuery  dataTables 插件是一个优秀的表格插件,是后台工程师的福音!它提供了针对数据表格的排序.浏览器分页.服务器 ...

  8. 【BZOJ1190】[HNOI2007]梦幻岛宝珠 分层背包DP

    [BZOJ1190][HNOI2007]梦幻岛宝珠 Description 给你N颗宝石,每颗宝石都有重量和价值.要你从这些宝石中选取一些宝石,保证总重量不超过W,且总价值最大为,并输出最大的总价值. ...

  9. 《从零开始学Swift》学习笔记(Day 42)——构造函数调用规则

    原创文章,欢迎转载.转载请注明:关东升的博客 在构造函数中可以使用构造函数代理帮助完成部分构造工作.类构造函数代理分为横向代理和向上代理,横向代理只能在发生在同一类内部,这种构造函数称为便利构造函数. ...

  10. 《从零开始学Swift》学习笔记(Day 12)——说几个特殊运算符

    原创文章,欢迎转载.转载请注明:关东升的博客   除了一些常用的运算符,还有一些其他的: •      引用号(.):实例调用属性.方法等操作符. •      问号(?):用来声明可选类型. •   ...