Maison  >  Article  >  développement back-end  >  Comment lire un fichier csv en python

Comment lire un fichier csv en python

步履不停
步履不停original
2019-07-03 09:40:545390parcourir

Comment lire un fichier csv en python

Python lit et écrit des fichiers csv

Avant-propos

Virgule Les fichiers séparés par des virgules (CSV, parfois appelés valeurs séparées par des caractères car le caractère séparateur peut être autre qu'une virgule) stockent des données tabulaires (chiffres et texte) en texte brut. Le texte brut signifie que le fichier est une séquence de caractères et ne contient aucune donnée devant être interprétée comme un nombre binaire. Un fichier CSV se compose d'un nombre quelconque d'enregistrements, séparés par une sorte de caractère de nouvelle ligne ; chaque enregistrement est constitué de champs, et les séparateurs entre les champs sont d'autres caractères ou chaînes, le plus souvent des virgules ou des tabulations. Habituellement, tous les enregistrements ont exactement la même séquence de champs.

Caractéristiques

Les données lues sont généralement de type caractère. S'il s'agit d'un nombre, il en faut. à convertir manuellement. Pour les nombres

Lire les données en unités de ligne

Les colonnes sont séparées par des virgules ou des tabulations demi-chasse, généralement des virgules demi-chasse

Généralement, il y en a. pas d'espace au début de chaque ligne, la première ligne est la colonne d'attributs, les colonnes de données sont séparées par des séparateurs, il n'y a pas d'espaces et il n'y a pas de lignes vides entre les lignes.

Il est très important qu'il n'y ait pas de lignes vides entre les lignes. S'il y a des lignes vides ou des espaces à la fin des lignes dans l'ensemble de données, une erreur se produira généralement lors de la lecture des données, provoquant une erreur [index de liste hors plage]. PS : je me suis souvent laissé berner par cette erreur !

Écrire et lire des fichiers CSV à l'aide d'E/S Python

Écrire des fichiers CSV à l'aide d'E/S Python

Ce qui suit est le code pour télécharger le fichier de données de faible poids à la naissance "birthweight.dat" à partir de la source de l'auteur, le traiter et l'enregistrer dans un fichier 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()

Comment lire un fichier csv en python

Liste des erreurs courantes, index hors limites

La chose clé dont nous devons parler est avec open(birth_weight_file, " w" , newline='') comme f : cette instruction. Indique l'écriture dans un fichier csv. Si le paramètre newline='' n'est pas ajouté, cela signifie utiliser un espace comme caractère de nouvelle ligne, utilisez plutôt l'instruction with open(birth_weight_file, "w") comme f:. Des lignes vides apparaîtront dans le tableau généré.

Comment lire un fichier csv en python

Il est non seulement nécessaire d'utiliser les E/S python pour lire et écrire des données csv, mais aussi d'utiliser d'autres méthodes pour lire et écrire des données csv, ou pour télécharger le ensemble de données csv provenant d'Internet. Vérifiez s'il y a des espaces après chaque ligne ou s'il y a des lignes vides supplémentaires. Évitez les erreurs inutiles qui affectent le jugement lors de l’analyse des données.

Utilisez Python I/O pour lire les fichiers csv

Lorsque vous utilisez la méthode Python I/O pour lire, créez une nouvelle liste, puis suivez d'abord l'ordre des lignes et colonnes (semblable à un tableau à deux dimensions en langage C), stockez les données dans un objet List vide. Si vous devez le convertir en un tableau numpy, vous pouvez également utiliser np.array (nom de la liste) pour convertir entre les objets.

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,)

Utilisez Pandas pour lire les fichiers 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

Utilisez Tensorflow pour lire les fichiers CSV

Je fais habituellement Tensorflow est utilisé pour traiter différents types de données, je n'expliquerai donc pas trop l'utilisation de Tensorflow pour lire des données, je collerai un morceau de code ci-dessous.

'''使用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)
'''

Il existe d'autres façons de lire des fichiers en utilisant Python. Trois sont présentées ici et seront complétées de temps en temps.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn