做数据分析离不开对数据的获取,而常用到的作为数据存储的文件类型有:csv,json,vml,hdf等(本文介绍对csv文件的数据获取方法numpy.loadtxt())。
照自己目前的学习进度,对csv数据的获取通常会用到numpy模块的loadtxt()方法以及在numpy基础上的pandas模块(下篇博客提及).
参数 | 作用 |
---|---|
fname | 被读取的文件名(文件的相对地址或者绝对地址) |
dtype | 指定读取后数据的数据类型 |
comments | 跳过文件中指定参数开头的行(即不读取) |
delimiter | 指定读取文件中数据的分割符 |
converters | 对读取的数据进行预处理 |
skiprows | 选择跳过的行数 |
usecols | 指定需要读取的列 |
unpack | 选择是否将数据进行向量输出 |
encoding | 对读取的文件进行预编码 |
fname:指定需要读取的CSV文件(从某种意义来说,CSV文件属于txt文件,详细可百度)地址即可完成最简单的读取操作,如下:
创建一个csv文件(test_csv.csv),文件内容是:
使用numpy.loadtxt()读取,此时使用文件的相对地址进行读取:
import numpy as np
csv_array = np.loadtxt('./test_csv.csv',dtype=str)
结果显示为:
考虑到loadtxt()中的dtype参数默认设置为float,这里设置为str字符串便于显示,顺带说一下,dtype参数指定读取后的数据类型,而numpy读取后的数据是一个numpy多维数组的数据类型,下下博客可能介绍。
comments:comments参数指定读取中,跳过以comments参数开头的行,如:类似linux系统的配置文件中用于说明的行,一般用“#”开头,我们就可以用comments参数进行跳过。
(演示需要)建立一个TXT文件test.txt,内容如下:
使用numpy进行读取:
import numpy as np
txt_array = np.loadtxt('./test.txt',dtype=str,comments='#')
print(txt_array)
结果显示为:
delimiter:该参数类似于python处理字符串分割中的split()函数,对数据根据参数进行分割处理。例如fname参数中的文件test_csv.csv,csv文件默认是以逗号分隔数据,在查看文件时没有显示,当没有使用delimiter参数进行分割时,默认是将整个数据一起输出,当使用delimiter参数时:
import numpy as np
csv_array = np.loadtxt('./test_csv.csv',dtype=str,delimiter=',')
print(csv_array)
结果显示为:
结果将数据分行输出了
converters:该参数是将某一列的数据进行函数预处理再获取,格式为:{列号:函数},可以看成一个字典形式,对列上的所有数据进行函数处理
具体过程如下:
先定义一个函数
def _is_num(_str):
if len(_str)>1:
return 'num'
return 'values'
使用converters参数操作文件:
csv_array = np.loadtxt('./test_csv.csv',
dtype=str,
delimiter=',',
converters={1:_is_num})
结果显示为:
skiprows:指定读取时忽略的行数,默认从首行开始计数,也就是说,当我们设置skiprows=1时,列名就会被跳过不读取,这个参数经常被这样使用:
csv_array = np.loadtxt('./test_csv.csv',
dtype=str,
delimiter=',',
converters={1:_is_num},
skiprows=1)
结果显示为:
usecol:usecols参数指定我们需要使用的列,用于提取文件中我们使用的数据,也就是说,平时中我们可能不需要index序列之类的,只要values这一列的数据,如下设置:
csv_array = np.loadtxt('./test_csv.csv',
dtype=str,
delimiter=',',
usecols=1,
skiprows=1)
csv文件的列号是从0开始计数,所以我们在这里将参数设置为1.
结果显示为:
unpack:选择是否将数据向量输出,默认是False,即将数据逐行输出,当设置为True时,数据将逐列输出。
csv_array = np.loadtxt('./test_csv.csv',
dtype=str,
delimiter=',',
unpack=True,
skiprows=1)
结果显示为:
encoding:这个参数是决定读取文件时使用的编码方式,也就是对文件编码方式进行更改,python经常有编码方面的问题出现,关于编码与解码的换一篇博客再讲,在这里就不细说了。