数据的读取

python中常见的数据读取方式有很多,下面简单介绍以下集中比较常用的读取数据的方法:
  1. 利用pandas中的read_csv模块直接将数据读取出来。
data = pd.read_csv('/home/nw/Desktop/dataset/iris.txt',header = None)

上面的代码,read_csv中前面的是数据集存放的路径,后面的header很重要,经常以为少了header,数据的总量减小了1,因为少掉的那一行数据变成了DataFrame里面的列索引。
2. 还有一种是比较传统的方法,直接用open打开文件,把文件里面的信息先取出来,不管取出来是什么样子的,线取出来再说,想要作什么处理直接对取出的变量做处理即可。

f= open('/home/nw/Desktop/dataset/iris.txt','rb')
dataset = pickle.load(f)#这种方法适用于自己存取自己的数据,有时候在读取别人的数据的时候是不行的,因为别人存数据的方式不一定是用pickle.dump的方式存数据的。
f = open('/home/nw/Desktop/dataset/iris.txt')
'''
注意这里的open后面最好不要加上其他的读取方式,不需要‘rb’之类的读取方式。因为在后续的数据处理中可能还需要将二进制的数据转换成自己想要的个数。 
'''
lines = f.readlines()
'''
现在lines中已经包含了所有的数据信息,我们想要得到的数据格式都可以基于lines做处理。如我读出的iris数据格式是一个列表的形式,使用len(lines)得到列表中元素的个数是151,打印出lines,可以看到lines中每个元素都是一个字符串,并且每个字符串后面都有'\n'的换行字符,最后一行是空行,所以最后一行是多余,并且要去掉每行中的'\n'
'''
arr = []
for i in range(len(lines)):
    if lines[i] != '\n':
        arr.append(lines[i])
for i in range(len(arr)):
    arr[i] = arr[i].strip('\n')#将每行的'\n'脱去

有一种情况是用pandas读出来的数据,每一行是一个字符串的形式,而且将全部的列都整合在一行的字符串里面了,这样读取出来的数据是有误的,我们需要使用到的参数是:
delim_whitespace : boolean, default False.
指定空格(例如’ ‘或者’ ‘)是否作为分隔符使用,等效于设定sep=’\s+’。如果这个参数设定为Ture那么delimiter 参数失效。
如需要载入uci数据集中的auto-mpg.txt文件,如果使用
pd.read_csv(path,header = None)读出来的结果将是一行一行的字符串,如果添加参数delim_whitespace = True,那么就会得到想要的pandas格式
pd.read_csv(path,header = None,delim_whitespace = True)

如果数据之间不是按照空格来分列的,是按照‘,’来分隔的,那么我们就不用参数delim_whitespace这个参数作为分隔符,用sep = ‘,’
pd.read_csv(path,header = None,sep = ‘,’)

猜你喜欢

转载自blog.csdn.net/baidu_36161077/article/details/73924802