机器学习之python读取CSV文件

来源:互联网 发布:抄日记软件 编辑:程序博客网 时间:2024/05/22 07:52

当我们在用python处理机器学习的问题时,往往需要先读取数据,这些数据通常都是文件,我今天遇到的是CSV文件,是在kaggle竞赛数据集下载的(比如手写数字识别,以及我在博客中用到的泰坦尼克数据都是CSV文件)。
数据下载地址:数据下载
接下来,我介绍两种方法读取文件数据。
第一种:直接用open函数打开文件。程序如下:

import csvimport numpy as npwith open('F:/泰坦尼克/train.csv','r') as csvfile:    reader = csv.reader(csvfile)    rows= [row for row in reader]print (rows)#输出所有数据data=np.array(rows)#rows是数据类型是‘list',转化为数组类型好处理print("out0=",type(data),data.shape)print("out1=",data)

第二种:直接用python 里的pandas读取,很方便。程序如下:

#import pandas as pd#data=pd.read_csv('F:/泰坦尼克/train.csv')#print("out0=",data)import pandas as pdimport osimport numpy as nptrainFile = "F:/泰坦尼克/train.csv"##python3.6版本可读取,但是有的不行,pwd = os.getcwd()os.chdir(os.path.dirname(trainFile))trainData = pd.read_csv(os.path.basename(trainFile))os.chdir(pwd)print(trainData)#输出数据data=trainData.iloc[0:892,0:12]#读取所有数据print("------------------out",data)#pandas数据格式为DataFrame,转化为numpy数组格式,方便处理print (data.as_matrix(columns=None))print(data.shape)

我的python版本是3.6,如果版本低的话,貌似可以用前面注释的三行就可以了,我最后都转换成数组格式了,好处理。(本来我今天是想处理手写数字识别的,因为那个最后需要转换成数组,但那个文件稍大,我的渣渣电脑就读不出来,所以就先用泰坦尼克这个数据学习读取CSV文件)。
其他参考资料:
pandas处理csv表格
Python3 pandas read_csv 报错解决方法
Python 读取csv的某列
我今天的博文也是参考网上其他博友的的文章内容,非常感谢他们分享知识。
如有错误,欢迎指出,谢谢。


补充一点内容:如何把txt文件转化为csv文件

在尝试softmax分类时, 我们经常使用经典的鸢尾花数据集Iris(下载链接https://archive.ics.uci.edu/ml/datasets/Iris ) 。但是我下载的时候不是那种csv文件,所以我把数据存为txt文件,然后转化为csv文件(按理说把后缀名修改后,就可以了,但是我的电脑上不行),程序如下(python版本3.6):

import numpy as np  import pandas as pd  txt=np.loadtxt("C:/Users/jingshan/Desktop/irisdata.txt",   dtype={'names': ('sepal length', 'sepal width', 'petal length', 'petal width', 'label'),          'formats': (np.float, np.float, np.float, np.float, '|S15')},   delimiter=',', skiprows=0)#|S15 (a 15-byte string)print("out=",txt)print(type(txt))txtDF = pd.DataFrame(txt)#转化为DataFrame格式txt1=txtDF.to_csv('C:/Users/jingshan/Desktop/irisdata1.csv',index=False) print(type(txtDF)) 

其中np.loadtxt 作用是把文本文件(*.txt)读入并以矩阵或向量的形式输出。

也可以这样写:

import numpy as np  import pandas as pdtxt=np.genfromtxt('C:/Users/jingshan/Desktop/irisdata.txt', delimiter=',', dtype=None, names=('sepal length', 'sepal width', 'petal length', 'petal width', 'label'))print("out=",txt)print(type(txt))txtDF = pd.DataFrame(txt)#转化为DataFrame格式txt1=txtDF.to_csv('C:/Users/jingshan/Desktop/irisdata1.csv',index=False) 

1 ,genfromtxt函数创建数组表格数据
2,genfromtxt主要执行两个循环运算。第一个循环将文件的每一行转换成字符串序列。第二个循环将每个字符串序列转换为相应的数据类型。
3,genfromtxt能够考虑缺失的数据,但其他更快和更简单的函数像loadtxt不能考虑缺失值。

好的,就这样,如有错误,欢迎指出,谢谢。