Python读写csv文件
媒介
逗号分开值(Comma-Separated Values,CSV,偶然也称为字符分开值,由于分开字符也可以不是逗号),其文件以纯文本情势存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必需像二进制数字那样被解读的数据。CSV文件由恣意数量的纪录构成,纪录间以某种换行符分开;每条纪录由字段构成,字段间的分开符是别的字符或字符串,最罕见的是逗号或制表符。平常,一切纪录都有完全相同的字段序列.
特性
读掏出的数据平常为字符范例,假如是数字须要工资转换为数字
以行动单元读取数据
列之间以半角逗号或制表符为分开,平常为半角逗号
平常为每行开首不空格,第一行是属性列,数据列之间以距离符为距离无空格,行之间无空行。
行之间无空行十分重要,假如有空行或许数据集中行末有空格,读取数据时平常会失足,激发[list index out of range]毛病。PS:已被这个毛病坑过很屡次!
运用python I/O写入和读取CSV文件
运用PythonI/O写入csv文件
以下是将"birthweight.dat"低诞生体重的dat文件从作者源处下载下来,而且将其处置惩罚后保存到csv文件中的代码。
import csv import os import numpy as np import random import requests # name of data file # 数据集称号 birth_weight_file = 'birth_weight.csv' # download data and create data file if file does not exist in current directory # 假如当前文件夹下没有birth_weight.csv数据集则下载dat文件并生成csv文件 if not os.path.exists(birth_weight_file): birthdata_url = 'https://github.com/nfmcclure/tensorflow_cookbook/raw/master/01_Introduction/07_Working_with_Data_Sources/birthweight_data/birthweight.dat' birth_file = requests.get(birthdata_url) birth_data = birth_file.text.split('\r\n') # split支解函数,以一行作为支解函数,windows中换行标记为'\r\n',每一行背面都有一个'\r\n'标记。 birth_header = birth_data[0].split('\t') # 每一列的题目,标在第一行,等于birth_data的第一个数据。并运用制表符作为分别。 birth_data = [[float(x) for x in y.split('\t') if len(x) >= 1] for y in birth_data[1:] if len(y) >= 1] print(np.array(birth_data).shape) # (189, 9) # 此为list数据情势不是numpy数组不能运用np,shape函数,然则我们可以运用np.array函数将list对象转化为numpy数组后运用shape属性举行检察。 with open(birth_weight_file, "w", newline='') as f: # with open(birth_weight_file, "w") as f: writer = csv.writer(f) writer.writerows([birth_header]) writer.writerows(birth_data) f.close()
罕见毛病list index out of range
个中我们重点须要讲的是 with open(birth_weight_file, "w", newline='') as f: 这个语句。示意写入csv文件,假如不加上参数 newline='' 示意以空格作为换行符,而是用 with open(birth_weight_file, "w") as f: 语句。则生成的表格中会涌现空行。
不仅仅是用python I/O举行csv数据的读写时,应用其他要领读写csv数据,或许从网上下载好csv数据集后都须要检察其每行后有无空格,或许有无过剩的空行。防止不必要的毛病~影响数据剖析时的推断。
运用PythonI/O读取csv文件
运用python I/O要领举行读取时等于新建一个List 列表然后根据先行后列的递次(相似C语言中的二维数组)将数据存进空的List对象中,假如须要将其转化为numpy 数组也可以运用np.array(List name)举行对象之间的转化。
birth_data = [] with open(birth_weight_file) as csvfile: csv_reader = csv.reader(csvfile) # 运用csv.reader读取csvfile中的文件 birth_header = next(csv_reader) # 读取第一行每一列的题目 for row in csv_reader: # 将csv 文件中的数据保存到birth_data中 birth_data.append(row) birth_data = [[float(x) for x in row] for row in birth_data] # 将数据从string情势转换为float情势 birth_data = np.array(birth_data) # 将list数组转化成array数组便于检察数据构造 birth_header = np.array(birth_header) print(birth_data.shape) # 应用.shape检察构造。 print(birth_header.shape) # # (189, 9) # (9,)
运用Pandas读取CSV文件
import pandas as pd csv_data = pd.read_csv('birth_weight.csv') # 读取练习数据 print(csv_data.shape) # (189, 9) N = 5 csv_batch_data = csv_data.tail(N) # 取后5条数据 print(csv_batch_data.shape) # (5, 9) train_batch_data = csv_batch_data[list(range(3, 6))] # 取这20条数据的3到5列值(索引从0最先) print(train_batch_data) # RACE SMOKE PTL # 184 0.0 0.0 0.0 # 185 0.0 0.0 1.0 # 186 0.0 1.0 0.0 # 187 0.0 0.0 0.0 # 188 0.0 0.0 1.0
运用Tensorflow读取CSV文件
本人在日常平凡平常都是运用Tensorflow处置惩罚种种数据,所以关于运用Tensorflow读取数据在此不过量的举行诠释,下面贴上一段代码。
'''运用Tensorflow读取csv数据''' filename = 'birth_weight.csv' file_queue = tf.train.string_input_producer([filename]) # 设置文件名行列,如许做可以批量读取文件夹中的文件 reader = tf.TextLineReader(skip_header_lines=1) # 运用tensorflow文本行阅读器,而且设置疏忽第一行 key, value = reader.read(file_queue) defaults = [[0.], [0.], [0.], [0.], [0.], [0.], [0.], [0.], [0.]] # 设置列属性的数据花样 LOW, AGE, LWT, RACE, SMOKE, PTL, HT, UI, BWT = tf.decode_csv(value, defaults) # 将读取的数据编码为我们设置的默许花样 vertor_example = tf.stack([AGE, LWT, RACE, SMOKE, PTL, HT, UI]) # 读取获得的中心7列属性为练习特性 vertor_label = tf.stack([BWT]) # 读取获得的BWT值示意练习标签 # 用于给掏出的数据添加上batch_size维度,以批处置惩罚的体式格局读出数据。可以设置批处置惩罚数据大小,是不是反复读取数据,容量大小,行列末端大小,读取线程等属性。 example_batch, label_batch = tf.train.shuffle_batch([vertor_example, vertor_label], batch_size=10, capacity=100, min_after_dequeue=10) # 初始化Session with tf.Session() as sess: coord = tf.train.Coordinator() # 线程管理器 threads = tf.train.start_queue_runners(coord=coord) print(sess.run(tf.shape(example_batch))) # [10 7] print(sess.run(tf.shape(label_batch))) # [10 1] print(sess.run(example_batch)[3]) # [ 19. 91. 0. 1. 1. 0. 1.] coord.request_stop() coord.join(threads) ''' 关于运用一切Tensorflow的I/O操纵来讲开启和封闭线程管理器都是必要的操纵 with tf.Session() as sess: coord = tf.train.Coordinator() # 线程管理器 threads = tf.train.start_queue_runners(coord=coord) # Your code here~ coord.request_stop() coord.join(threads) '''
另有其他运用python读取文件的种种要领,这里引见三种,不定期举行补充。
以上就是python怎样读取csv文件的细致内容,更多请关注ki4网别的相干文章!