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

import csv
import numpy as np
with 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 pd
import os
import numpy as np
trainFile = "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 pd
txt=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不能考虑缺失值。

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