当前位置: 首页 > 工具软件 > Open Dialect > 使用案例 >

pandas读写文本格式数据和csv.Dialect属性

仉姚石
2023-12-01

pandas学习笔记(二)

上一篇笔记记录了关于pandas 数据载入的介绍

read_csv
从文件、URL或文件型对象读取分隔好的数据,逗号是默认分隔符

read_table
从文件、URL或文件型对象读取分隔好的数据,制表符 ‘\t’ 是默认分隔符

而关于数据导出文件:

使用 DataFrame 的 to_csv 方法,可以将数据导出为逗号分隔的文件

写入到 sys.stdout 控制台中打印文本,可以用其他分隔符

import sys
data.to_csv(sys.stdout,sep='|')

缺失值在输出时以空字符串输出,na_rep=‘NULL’

行和列的标签一般会被写入,但可以禁止写入
index=False
header=False

===========================
Unix 用 !cat mine/ex.csv
Windows 用 !type mine/ex.csv

接收一个带有一行或多行的错误的文件

对任何带有单字符分隔符的文件,可以使用python的内建 csv 模块,使用时,需要将任一打开的文件或文件型对象传给 csv.reader

import csv
f=open('mine/ex.csv')
reader=reader(f)

用遍历文件那样遍历reader会产生元组

for line in reader:
	print(line)

之后可以自行处理数据为你想要的结果

  1. 将文件读取为行的列表
with open('mine/ex.csv') as f:
	lines=list(csv.reader(f))
  1. 将数据拆分为列名行和数据行
header,values=lines[0],lines[1:]
  1. 使用字典推导式和表达式 zip(*value) 生成一个包含数据列的字典,字典中行转置为列
data_dict={h:v for h,v in zip(header,zip(*values))}

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

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.Dialect 参数及其描述:

delimiter
用于分隔字段的字符。默认为‘ , ’

lineterminator
行终止符,默认为 ‘ \r\n ’。

quotechar
用于带有特殊字符字段的引用符号。默认为‘ " ’

quoting
引用惯例。选项包括
csv.QUOTE_ALL(引用所有的字段)
csv.QUOTE_MINIMMAL(只使用特殊字符,如分隔符) 默认是这个
csv.QUOTE_MONNUMERIC 和 csv.QUOTE_NONE(不引用)

skipinitialspace
忽略每个分隔符后的空白符。默认为False

doublequote
如何处理字段内的引号。如果为True,则是双引号。

escapechar
当引用设置为 csv.QUOTE_NONE 时用于转义分隔符的字符串,默认是禁用的

对于更复杂的文件,无法使用csv模块,可以使用字符串的 split 方法,正则表达式,re.split 进行行拆分和其他清理工作

需要手动写入被分隔的文件时,可以使用csv.writer,这个函数接收一个已经打开的可写入文件对象以及和csv.reader相同的方言

with open('my.csv','w') as f:
	writer=csv.writer(f,dialect=my_dialect)
	writer.writerow(('1','2','3'))

内容部分引用于《利用Python进行数据分析》第2版(Wes McKinney著,徐敬一译),仅供大家一起学习交流

如有错误,请多指教

 类似资料: