以下の内容はhttps://pydocument.hatenablog.com/entry/2023/03/21/200600より取得しました。


PythonでCSVファイルを読み込む方法とエラー対処法

Pythonはデータ分析や処理に広く利用されており、CSV (Comma-Separated Values) ファイルの読み込みはその基本操作の一つです。ここでは、Pythonの標準ライブラリcsvpandasライブラリを利用して、CSVファイルを読み込み、扱うための方法を解説します。

基本的なCSVファイルの読み込み

PythonCSVファイルを読み込むには、標準ライブラリのcsvモジュールが利用可能です。以下が、example.csvという名前のCSVファイルを読み込み、各行をリストとして出力する基本的なコードです。

import csv

with open('example.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    for row in reader:
        print(row)

はじめに、open()関数を使ってexample.csvファイルを開きます。mode='r'はファイルを読み込みモードで開くことを意味し、encoding='utf-8'はファイルがUTF-8エンコーディングであることを指定します。csv.reader(file)はファイルオブジェクトを読み込み、行ごとに分割するイテレータを返します。最後に、forループで各行を反復処理し、print(row)で各行の内容を表示します。

ヘッダー行の処理

CSVファイルには、列名を記述したヘッダー行が含まれることがあります。ヘッダー行を読み飛ばし、データ行だけを処理したい場合は、next()関数を使用します。

import csv

with open('example.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    header = next(reader)  # ヘッダー行を読み飛ばす
    print("Header:", header) # ヘッダーを出力
    for row in reader:
        print(row)

next(reader)を呼び出すことで、readerの最初の行(ヘッダー行)が読み込まれ、header変数に格納されます。その後、forループで残りのデータ行が処理されます。

特定の列だけを抽出

CSVファイルから特定の列だけを抽出したい場合もあります。例えば、CSVファイルが「名前、年齢、メールアドレス」の順で構成されていて、名前とメールアドレスだけを抽出したい場合は、以下のようにします。

import csv

with open('example.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    header = next(reader)
    for row in reader:
        name = row[0]  # 1列目(名前)
        email = row[2]  # 3列目(メールアドレス)
        print(f"Name: {name}, Email: {email}")

リストのインデックスは0から始まるため、row[0]は1列目、row[2]は3列目を指します。

CSVファイルを辞書として読み込む

csv.DictReaderを使うと、CSVファイルの各行を辞書として読み込むことができます。ヘッダー行が辞書のキーとなり、データ行が値となります。これにより、列名でデータにアクセスできるようになり、コードの可読性が向上します。

import csv

with open('example.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    for row in reader:
        print(row['名前'], row['メールアドレス']) # 列名でアクセス

この例では、example.csvのヘッダー行に「名前」と「メールアドレス」という列名があることを前提としています。row['名前']row['メールアドレス']のように、列名をキーとして指定することで、対応する値を取得できます。

応用: pandasを使ったCSVファイルの読み込み

より高度なデータ分析を行う場合は、pandasライブラリの使用を検討します。pandasは、データ操作と分析のためのツールで、CSVファイルの読み込みも非常に簡単に行えます。

import pandas as pd

df = pd.read_csv('example.csv')
print(df)

pd.read_csv()関数はCSVファイルを読み込み、DataFrameオブジェクトを返します。DataFrameは、行と列にラベルを持つ2次元のデータ構造で、さまざまなデータ操作(フィルタリング、集計、変換など)を簡単に行うことができます。

pandasでは以下のように、read_csv実行時にエンコーディングを指定することも可能です。

df = pd.read_csv('example.csv', encoding='utf-8')

read_csv()の細かい使い方は、下記の記事を参考にしてください。

pydocument.hatenablog.com

エラーハンドリング

CSVファイルの読み込み時に発生する可能性のあるエラーとその対処法について説明します。

エラー 原因 対処法
FileNotFoundError 指定されたファイルが存在しない。 ファイルパスが正しいか確認する。
UnicodeDecodeError ファイルのエンコーディングが指定と異なる。 open()関数で正しいエンコーディング(例:encoding='utf-8')を指定する。
csv.Error CSVファイルの形式が不正(区切り文字など)。 CSVファイルの内容を確認し、必要に応じて修正する。
pd.errors.ParserError pandasでCSV解析時にエラーが発生した。 CSVファイルの内容を確認し、必要に応じて修正する。区切り文字の指定が正しいか確認する。sep引数を指定する。(例 sep='\t')

システムの本番環境や他人が再利用する可能性のあるコードでは、以下のように適切にエラーハンドリングを行なってください。

エラーハンドリングの例: csv

import csv

try:
    with open('example.csv', mode='r', encoding='utf-8') as file:
        reader = csv.reader(file)
        for row in reader:
            print(row)
except FileNotFoundError:
    print("ファイルが見つかりません。ファイルパスを確認してください。")
except UnicodeDecodeError:
    print("ファイルのエンコーディングが不正です。正しいエンコーディングを指定してください。")
except csv.Error as e:
    print(f"CSV読み込みエラー: {e}")
except Exception as e:
    print("想定外のエラー", e)

エラーハンドリングの例: pandas

pandas利用時のエラーハンドリングの例:

import pandas as pd

try:
    df = pd.read_csv('example.csv')
    print(df)
except FileNotFoundError:
    print("ファイルが見つかりません。ファイルパスを確認してください。")
except pd.errors.ParserError as e:
    print(f"CSV pandas読み込みエラー: {e}")
except Exception as e:
    print("想定外のエラー", e)

まとめ

この記事では、Pythoncsvモジュールとpandasライブラリを使ってCSVファイルを読み込み、処理する方法を解説しました。基本的な読み込みから、ヘッダー行の処理、特定の列の抽出、辞書形式での読み込み、そしてpandasを使った高度なデータ操作まで、幅広いテクニックを紹介しました。さらに、発生しやすいエラーとその対処法についても説明しました。

最後に、Pythonのデータ分析の学習に利用できるサイトを紹介します。ぜひご活用ください。

[PR]

click.linksynergy.com

click.linksynergy.com

click.linksynergy.com




以上の内容はhttps://pydocument.hatenablog.com/entry/2023/03/21/200600より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14