在python的学习过程中,我们会经常遇到各种格式的数据加载、处理与存储。今天我们来总结一下常见格式数据的读取与处理。
一、各种各样的文本数据
1.1 CSV与TXT读取
1、csv
csv 文件格式的本质是一种以文本存储的表格数据(使用 Excel 工具即可读写 csv 文件)。csv 文件的每行代表一行数据,每行数据中每个单元格内的数据以逗号隔开。首先我们先来看一下数据长什么样子,这里使用的是jupyter notebook编辑器。
!cat '/opt/jupyter_file/dataset/数据获取与分析/data1.csv'
a,b,c,d,message
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
接下来我们看一下数据的读取:
df=pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/data1.csv')
df
或者下面一种:
#需要知道分隔符
pd.read_table('/opt/jupyter_file/dataset/数据获取与分析/data1.csv',sep=',')
我们也可以设置一下参数:
#read_csv读取时会自动识别表头,
#数据有表头时不能设置header为空(默认读取第一行,即header=0);
#数据无表头时,若不设置header,第一行数据会被视为表头,应传入names参数设置表头名称或设置header=None。
pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/data1.csv',header=None)
pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/data1.csv',names=['a','b','c','d','e'])
还可以设置一下索引列:
names=['a','b','c','d','e']
pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/data1.csv',names=names,index_col='e')#制定索引列
相对复杂的索引列:
pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/csv_mindex.csv',index_col=['key1','key2'])
!cat '/opt/jupyter_file/dataset/数据获取与分析/data4.csv'
# hey!
a,b,c,d,message
# just wanted to make things more difficult for you
# who reads CSV files with computers, anyway?
1,2,3,4,hello
5,6,7,8,world
9,10,11,12,foo
pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/data4.csv',skiprows=[0,2,3])#跳过索引为0,2,3的行
result=pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/data5.csv')
result
pd.isnull(result)
result=pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/data5.csv',na_values=['null'])
result
sentinels={'message':['foo','NA'],'something':['two']}
pd.read_csv('/opt/jupyter_file/dataset/数据获取与分析/data5.csv',na_values=sentinels)#设置为0
这里我总结一下read_csv()常用到的参数
类型
说明
sep
指定分隔符。如果不指定参数,则会尝试使用逗号分隔。
delimiter
定界符,备选分隔符(如果指定该参数,则sep参数失效)
delim_whitespace
指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep='\s+'。如果这个参数设定为Ture那么delimiter 参数失效。
header
指定行数用来作为列名,数据开始行数
names
用于结果的列名列表,如果数据文件中没有列标题行,就需要执行header=None。
index_col
用作行索引的列编号或者列名,如果给定一个序列则有多个行索引。
dtype
每列数据的数据类型。
skiprows
需要忽略的行数(从文件开始处算起),或需要跳过的行号列表(从0开始)。
skipfooter
从文件尾部开始忽略。 (c引擎不支持)
nrows