ホームページ > バックエンド開発 > Python チュートリアル > PythonでCSVファイルを読み取る方法

PythonでCSVファイルを読み取る方法

步履不停
リリース: 2019-07-29 09:55:50
オリジナル
5527 人が閲覧しました

PythonでCSVファイルを読み取る方法

Python は csv ファイルの読み取りと書き込みを行う

はじめに

カンマカンマ区切り値 (CSV、区切り文字がカンマ以外の場合があるため、文字区切り値と呼ばれることもあります) ファイルには、表形式のデータ (数値とテキスト) がプレーン テキストで保存されます。プレーン テキストとは、ファイルが一連の文字であり、2 進数のように解釈する必要があるデータが含まれていないことを意味します。 CSV ファイルは、何らかの改行文字で区切られた任意の数のレコードで構成されます。各レコードはフィールドで構成され、フィールド間の区切り文字は他の文字または文字列 (最も一般的にはカンマまたはタブ) です。通常、すべてのレコードはまったく同じフィールド順序を持ちます。

特長

読み出されるデータは通常文字型で、数値の場合は数値の場合

行単位でデータを読み込む

列は半角カンマまたはタブで区切られており、通常は半角カンマです

一般的には各行の先頭にスペースはありません。最初の行は属性列です。データ列は区切り文字で区切られています。スペースはなく、行間に空白行はありません。

行間に空行がないことが非常に重要です。データ セット内の行の末尾に空行がある場合、またはスペースがある場合、通常、データの読み取り時にエラーが発生します。 [リストインデックスが範囲外です]エラーが発生します。 PS: 私はこのエラーに何度も騙されました。

Python I/Oを使用したCSVファイルの書き込みと読み取り

Python I/Oを使用したCSVファイルの書き込み

次のこれは、作成者のソースから「birthweight.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()
ログイン後にコピー

PythonでCSVファイルを読み取る方法

よくある間違いリストのインデックスが範囲外です

話しなければならない重要なことは、open(birth_weight_file, " w" , newline='') as f: このステートメント。 CSV ファイルの書き込みを示します。パラメータ newline='' が追加されていない場合は、改行文字としてスペースが使用されることを意味します。代わりに、with open(birth_weight_file, "w") as f: ステートメントを使用します。生成されたテーブルには空白の行が表示されます。

PythonでCSVファイルを読み取る方法

Python I/O を使用して CSV データを読み書きするだけでなく、他のメソッドを使用して CSV データを読み書きしたり、インターネットから取得した csv データセット 各行の後にスペースがないか、余分な空白行がないか確認してください。データ分析時の判断に影響を与える不要なエラーを回避します。

Python I/O を使用して csv ファイルを読み取る

Python I/O メソッドを使用して読み取る場合は、新しいリストを作成し、次の順序に従います。最初に行と列 (C 言語の 2 次元配列に似ています) を空の 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でファイルを読み込む方法は他にもありますが、ここでは3つ紹介し、随時補足していきます。

以上がPythonでCSVファイルを読み取る方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート