Bootstrap

python读取CSV文件

1. 文件读取函数

with open(doc_name, mode, encoding="utf-8") as f:
	data = f.read() 等读写操作

1.1 参数

参数:doc_name, 文件路径
参数: mode,
	常用模式:
		1.'r',只读 用read()
		2.'w', 只写 用write()       # 会清除之前写的内容,若没有,则新建
		3.'a', 追加内容,用write()    #会在已经写的内容基础上追加新的内容
	
参数:encoding,默认"utf-8",
	注意:要读取非UTF-8编码的文本文件,需要给open()函数传入encoding参数

对参数 mode,参见:文件读写操作

1.2 file 对象属性

1.2.1 属性

file.closed	表示文件已经被关闭,否则为False
 
file.mode	文件打开时使用的访问模式

file.encoding	文件所使用的编码

file.name	文件名

file.newlines	
	未读取到行分隔符时为None;
	只有一种行分隔符时为一个字符串;
	当文件有多种类型的行结束符时,则为一个包含所有当前所遇到的行结束的列表。
	
file.softspace	为0表示在输出一数据后,要加上一个空格符,1表示不加

1.2.2 读操作

file.read([size])   将文件数据作为字符串返回,可选参数size控制读取的字节数
			 注意:当读取大文件时,反复调用read(size)方法,每次最多读取size个字节的内容。

file.readline([size])   每次读取一行内容
file.readlines([size])   返回文件中行内容的列表,size参数可选

1.2.3 写操作

file.write(str)   将字符串写入文件
file.writelines(strings)   将字符串序列写入文件

2. 利用pandas读取

2.1 函数接口

返回值为 dataframe

pandas.read_csv(filepath_or_buffer, 			# 文件路径名,字符串类型
				sep=NoDefault.no_default, 		# 分隔符
				delimiter=None, 				# 定界符,备选分隔符(如果指定该参数,则sep参数失效) 
				header='infer', 				# 指定行数用来作为列名,以及数据开始行数
				names=NoDefault.no_default, 	# 要使用的列名
				index_col=None, 				# 用作 DataFrame 的行标签的列
				usecols=None, 					# 返回所有列的子集,即选中的列;	
				squeeze=None, 					# 如果解析后的数据只包含一列,则返回 Series,默认值为 False
				prefix=NoDefault.no_default, 	# 在没有列标题时,给列添加前缀。例如:添加‘X’ 成为 X0, X1, ... 
				mangle_dupe_cols=True, 			# 将重复的列‘X’...’X’表示为‘X.0’...’X.N’。默认为True,如果设定为false则会将所有重名列覆盖
				dtype=None, 					# 每列数据的数据类型
				engine=None, 					# 解析引擎
				converters=None, 				# 用于转换特定列中值的函数的定义。键可以是整数或列标签
				true_values=None, 				# 列表类型,将其视为真 True
				false_values=None, 				# 列表类型,将其视为假 False
				skipinitialspace=False, 		# 忽略分隔符后的空白(默认为False,即不忽略)
				skiprows=None, 					# 需要忽略的行数
				skipfooter=0, 					# 从文件尾部开始忽略。 (c引擎不支持) 
				nrows=None, 					# 需要读取的行数(从文件头开始算起)。
				na_values=None, 				# 用于替换NA/NaN的值
				keep_default_na=True, 			# 解析数据时是否包含默认 NaN 值。
				na_filter=True, 				# 是否检查丢失值(空字符串或者是空值)
				verbose=False, 					# 是否打印各种解析器的输出信息,例如:“非数值列中缺失值的数量”等。 
				skip_blank_lines=True, 			# 如果为True,则跳过空行;否则记为NaN。 
				parse_dates=None, 				# 解析日期
				infer_datetime_format=False, 	# 如果设定为True并且parse_dates 可用,那么pandas将尝试转换为日期类型
				keep_date_col=False, 			# 如果连接多列解析日期,则保持参与连接的列。
				date_parser=None, 				# 于解析日期的函数,默认使用dateutil.parser.parser来做转换。
				dayfirst=False, 				# DD/MM格式的日期类型
				cache_dates=True, 				# 如果为 True,则使用惟一的、已转换日期的缓存来应用日期时间转换。
				iterator=False, 				# 返回一个TextFileReader 对象,以便逐块处理文件。
				chunksize=None, 				# 文件块的大小
				compression='infer', 			# 直接使用磁盘上的压缩文件。
				thousands=None, 				# 千分位分割符
				decimal='.', 					# 字符中的小数点
				lineterminator=None, 			# 行分割符,只在C解析器下使用。
				quotechar='"', 					# 用作标识开始和解释的字符。
				quoting=0, 						# 控制csv中的引号常量。
				doublequote=True, 				# 双引号,当单引号已经被定义,并且quoting 参数不是QUOTE_NONE的时候,使用双引号表示引号内的元素作为一个元素使用。
				escapechar=None, 				# 当quoting 为QUOTE_NONE时,指定一个字符使的不受分隔符限值。
				comment=None, 					# 标识着多余的行不被解析。如果该字符出现在行首,这一行将被全部忽略。
				encoding=None, 					# 指定字符集类型,通常指定为'utf-8';指定为Python标准字符编码
				encoding_errors='strict', 		# 如何对待编码错误
				dialect=None, 					# 如果没有指定特定的语言,如果sep大于一个字符则忽略。
				error_bad_lines=None, 			# 如果一行包含太多的列,那么默认不会返回DataFrame ,如果设置成false,那么会将改行剔除(只能在C解析器下使用)。	 
				warn_bad_lines=None, 			# 如果error_bad_lines =False,并且warn_bad_lines =True 那么所有的“bad lines”将会被输出(只能在C解析器下使用)。 
				on_bad_lines=None, 				# 指定遇到错误行(字段太多的行)时要做什么。可选参数:‘error’, ‘warn’, ‘skip’
				delim_whitespace=False, 		# 指定是否使用空格(例如’或’)作为 sep。
				low_memory=True, 				# 分块加载到内存,再低内存消耗中解析。
				memory_map=False, 				# 如果使用的文件在内存内,那么直接map文件使用。使用这种方式可以避免文件再次进行IO操作 
				float_precision=None, 			# 指定 C 引擎应该为浮点值使用哪个转换器
				storage_options=None)			# 对特定存储连接有意义的额外选项

2.2 重要参数解释

2.2.1 常用参数

参数:filepath, 			# 文件路径名,字符串类型
参数:sep,用于分割csv文件的分隔符;默认值为 ","
		注意:	1.当 engine="c"时,不能为空;
				2.当 engine="python"时,可以为空,python会自动探索分隔符;
				3.当 sep 是长度超过 1 的字符时,会被python视为正则表达式分割,并且忽略数据中的逗号;
参数:engine,解析引擎
		可选值:	1. "c",快
				2. "python",基本功能更完善
				3. "pyarrow",支持多线程。

2.2.2 列名索引参数

参数:header, 可选类型:int, list of int, None;默认值 ‘infer’
		作用:指定行数用来作为列名,以及数据开始行数;
		注意:	1.默认值 ‘infer’ 是推断列名;
				2.如果没有传递名称,则默认为与 header = 0 相同,并且从文件的第一行推断出列名称;
				3.如果显式传递列名称,则行为与 header = None 相同;
				4.如果 header = 0 则会替换掉原来的列名;
参数:names,array类型,要使用的列名,即最后结果中的列名;
参数:index_col, 可选类型:int, str, sequence of int / str,  False, 默认值:None
		作用:用作 DataFrame 的行标签的列,可以作为字符串名称或列索引给出。
		注意:	1.如果给定 int/str 序列,则使用 MultiIndex;
				2.index_col=False 用来强制使pandas不使用第一列作用索引;
参数:dtype,关于列的字典类型;
		作用:指定每列数据的数据类型			
		案例:{‘a’: np.float64, ‘b’: np.int32} 	

2.2.3 内容读取选择(行列)

参数:usecols,列表类型
		作用:返回所有列的子集,即选中的列;				
		注意:	1.若给定了names,则不能使用文件的标题行;
参数:skiprows,列表类型
		作用:要跳过的行数;
		注意:	1.从文件开始处算起,第一行为 0;
参数: nrows,整型;
		作用:要读取的行数(从文件头开始算起),用于从大文件中读取一些小样本

2.2.4 缺失值参数

参数: na_values,scalar, str, list-like, or dict
		作用: 用于替换NA/NaN的值。如果是字典,则指定对应列空值的替换								
		默认为解析NaN的顺序为:'',#N/A’, ‘#N/A N/A’, ‘#NA’, ‘-1.#IND’, ‘-1.#QNAN’, ‘-NaN’, ‘-nan’, ‘1.#IND’, ‘1.#QNAN’, ‘<NA>’, ‘N/A’, ‘NA’, ‘NULL’, ‘NaN’, ‘n/a’, ‘nan’, ‘null’.
参数: keep_default_na,布尔类型,默认值为 True
		作用:解析数据时是否包含默认 NaN 值;
		注意:与 na_values 有关;
		
参数:na_filter,布尔类型,默认为 True
		作用:是否检查丢失值(空字符串或者是空值),当为大文件且无缺失值时,可提升读取速度;

2.2.5 大文件参数

参数:iterator,布尔类型,默认为false 				
	作用:返回一个TextFileReader 对象,以便逐块处理文件。
参数:chunksize, int, default None
	作用: 文件块的大小,一次读取多少行数据
参数:compression,字符串或字典类型,默认值'infer', 			
	作用:直接使用磁盘上的压缩文件。
	如果使用infer参数,则使用 gzip, bz2, zip或者解压文件名中以‘.gz’,.bz2’,.zip, or ‘xz’这些为后缀的文件,否则不解压。
	如果使用zip,那么ZIP包中必须只包含一个文件。
	设置为None则不解压。 

2.2.6 日期参数

3. Python直接读取

import csv

with open(path_name) as f:
	f_csv = csv.reader(f)
	headers = next(f_csv)		# 获取表头
	for row in f_csv:
		pass 			# 获取每一行的数据进行操作

3.1 数据类型转换

column_types = [str, float, str, ..., int]
with open('file_name.csv') as f:
	f_csv = csv.reader(f)
	headers = next(f_csv)		# 获取表头
	for row in f_csv:
		row = [convert(value) for convert, value in zip(column_types, row)]
;