试验python读取外部数据的几种方式

摘要

python读取外部csv格式数据,【此处数据非大数据(>6TB),读取大数据利用分段方法】

主要介绍使用python自带的函数read、readlines读取数据转换为数据框,和使用pandas自带的函数read_csv读取csv数据的对比

1、readlines函数读取数据

数据是csv格式,按readlines读取时,每次读取一行,并且把这一行数据作为一个字符串对象;

file="train.csv"
with open(file) as f:
    row=[]
    for line in f.readlines():
        v=list(line.strip().split(","))
        row.append(v)
train=pd.DataFrame(row,columns=row[0])

如下,若csv文件如下:

name age height
xiaohong 18 90
xiaobai 20 100
ming 20 NA

用readlines读取的数据是

['name,age,height','xiaohong,18,90','xiaobai,20,100','ming,20,NA']

代码v=list(line.strip().split(","))的作用很重要

v=list(line.strip().split(","))
#使得f中的每一个变量都变成列表形式,
即将['name,age,height','xiaohong,18,90','xiaobai,20,100']
逐个变为[[name,age,height],[xiaohong,18,90],[xiaobai,20,100],[ming,20,NA]]
如果没有这条语句,则数据框train将是4行1列

2、csv模块读取csv文件

csv.reader(csvfile, dialect='excel', **fmtparams):

该函数返回一个reader对象,该对象可以迭代csv文件中的每一行,csv文件可以是任意支持iteratior协议的对象。每次调用它的__next__()方法(文件对象和列表对象都适用的方法),该对象返回一个字符串。从csv文件读取的每一行,都以列表的形式返回。

  参数解释:

     csvfile:可以是任何支持迭代器协议的对象,它每次返回一个字符串。如果它是一个文件对象,它应该以newline=''的形式打开(参照样例).

     dialect:是一个可选参数,用来定义一个仅针对特定CSV dialect的参数集。它可能是一个Dialect类的子类实例或由list_dialects()返回的多个字符串中的一个。其实这个看你想以什么规范操作csv文件,可选的参数有三个,分别是excel,excel-tab和unix,基本用不着该这个参数。

delimiter:这个参数是用来指明分割符的,多数csv文件的分隔符是英文逗号,但是万一有文件整点幺蛾子

咋整,比如把英文冒号当分割符,那就要把这个参数指明为:delimiter=’:’

                 quotechar:这个参数指明了引用符

#使用内置csv模块读取数据
start=datetime.datetime.now()
with open(r"C:\Users\titix\Desktop\医保欺诈\05算法模型\test_c.csv",'r',encoding='utf-8') as f:
    file=csv.reader(f)
    header = next(file)
    data=[line for line in file]
end=datetime.datetime.now()

print(end-start)

#将列表数据变成数据框
data=pd.DataFrame(data,header)

查看数据框
data

 

在上面代码中,采用序列生成器将迭代器中的序列生成列表data=[line for line in file],还可以采用for循环对列表进行末尾添加元素的方式,将迭代器中的数据写到列表中。

 

start=datetime.datetime.now()
data=[]
with open(r"C:\Users\titix\Desktop\医保欺诈\05算法模型\test_c.csv",'r',encoding='utf-8') as f:
    file=csv.reader(f)
    # header = next(file)
    for line in file:
        data.append(line)
end=datetime.datetime.now()
print(end-start)

3、pandas中read_csv读去csv数据

你可能感兴趣的:(算法)