Heim  >  Artikel  >  Backend-Entwicklung  >  So lesen Sie eine CSV-Datei in Python

So lesen Sie eine CSV-Datei in Python

步履不停
步履不停Original
2019-07-03 09:40:545484Durchsuche

So lesen Sie eine CSV-Datei in Python

Python liest und schreibt CSV-Dateien

Vorwort

Komma Getrennte durch Kommas getrennte Werte (CSV, manchmal auch als zeichengetrennte Werte bezeichnet, da das Trennzeichen ein anderes als ein Komma sein kann) Dateien speichern tabellarische Daten (Zahlen und Text) im Klartext. Klartext bedeutet, dass die Datei eine Folge von Zeichen ist und keine Daten enthält, die wie eine Binärzahl interpretiert werden müssen. Eine CSV-Datei besteht aus einer beliebigen Anzahl von Datensätzen, die durch ein Zeilenumbruchzeichen getrennt sind. Jeder Datensatz besteht aus Feldern, und die Trennzeichen zwischen den Feldern sind andere Zeichen oder Zeichenfolgen, am häufigsten Kommas oder Tabulatoren. Normalerweise haben alle Datensätze genau die gleiche Feldreihenfolge.

Merkmale

Die ausgelesenen Daten sind im Allgemeinen vom Typ Zeichen Für Zahlen

Daten in Zeileneinheiten lesen

Spalten werden durch Kommas halber Breite oder Tabulatoren getrennt, normalerweise Kommas halber Breite

Im Allgemeinen ist dies der Fall Kein Leerzeichen am Anfang jeder Zeile, die erste Zeile ist die Attributspalte, die Datenspalten sind durch Trennzeichen getrennt, es gibt keine Leerzeichen und es gibt keine Leerzeilen zwischen den Zeilen.

Es ist sehr wichtig, dass zwischen den Zeilen keine Leerzeilen vorhanden sind oder sich am Ende der Zeilen im Datensatz Leerzeichen befinden. Beim Lesen der Daten tritt in der Regel ein Fehler auf. verursacht einen Fehler [Listenindex außerhalb des gültigen Bereichs]. PS: Dieser Fehler hat mich schon oft getäuscht!

CSV-Dateien mit Python I/O schreiben und lesen

CSV-Dateien mit Python I/O schreiben

Folgendes ist der Code zum Herunterladen der Datendatei mit niedrigem Geburtsgewicht „birthweight.dat“ von der Quelle des Autors, zum Verarbeiten und Speichern in einer CSV-Datei.

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

So lesen Sie eine CSV-Datei in Python

Häufige Fehler, Listenindex außerhalb des zulässigen Bereichs

Das Wichtigste, worüber wir sprechen müssen, ist open(birth_weight_file, " w" , newline='') as f: diese Anweisung. Zeigt das Schreiben in eine CSV-Datei an. Wenn der Parameter „newline=“ nicht hinzugefügt wird, bedeutet dies, dass ein Leerzeichen als Zeilenumbruchzeichen verwendet wird. Verwenden Sie stattdessen die Anweisung „with open(birth_weight_file, „w“)“. In der generierten Tabelle werden leere Zeilen angezeigt.

So lesen Sie eine CSV-Datei in Python

Es ist nicht nur notwendig, Python-E/A zum Lesen und Schreiben von CSV-Daten zu verwenden, sondern auch andere Methoden zum Lesen und Schreiben von CSV-Daten oder zum Herunterladen zu verwenden CSV-Datensatz aus dem Internet. Überprüfen Sie, ob nach jeder Zeile Leerzeichen oder zusätzliche Leerzeilen stehen. Vermeiden Sie unnötige Fehler, die das Urteilsvermögen während der Datenanalyse beeinträchtigen.

Verwenden Sie Python I/O, um CSV-Dateien zu lesen

Wenn Sie die Python-I/O-Methode zum Lesen verwenden, erstellen Sie eine neue Liste und befolgen Sie dann zuerst die Reihenfolge der Zeilen (Ähnlich wie bei einem zweidimensionalen Array in der C-Sprache) speichern Sie Daten in einem leeren Listenobjekt. Wenn Sie sie in ein Numpy-Array konvertieren müssen, können Sie auch np.array(Listenname) zum Konvertieren zwischen Objekten verwenden.

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

Verwenden Sie Pandas, um CSV-Dateien zu lesen

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

Verwenden Sie Tensorflow, um CSV-Dateien zu lesen

Normalerweise verwende ich Tensorflow Um verschiedene Arten von Daten zu verarbeiten, werde ich nicht zu viel über die Verwendung von Tensorflow zum Lesen von Daten erklären. Ich werde unten einen Code einfügen.

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

Es gibt andere Möglichkeiten, Dateien mit Python zu lesen. Drei werden hier vorgestellt und von Zeit zu Zeit ergänzt.

Das obige ist der detaillierte Inhalt vonSo lesen Sie eine CSV-Datei in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn