【Python】行を指定してCSVファイルを読み込む方法

この記事では、Pythonを使ってCSVファイルを操作する方法について学びます。

具体的には、標準ライブラリのcsvモジュールとデータ解析ライブラリのpandasを使って、特定の行を指定してCSVファイルを読み込む方法を解説します。

初心者の方でも理解しやすいように、サンプルコードと実行結果を交えながら説明しますので、ぜひ最後までご覧ください。

目次から探す

PythonでのCSVファイル操作の基本

PythonでCSVファイルを操作する方法はいくつかありますが、代表的な方法としては標準ライブラリのcsvモジュールと、データ解析ライブラリのpandasを使用する方法があります。

これらのツールを使うことで、CSVファイルの読み込み、書き込み、データの操作が簡単に行えます。

csvモジュールの紹介

Pythonの標準ライブラリには、CSVファイルを操作するためのcsvモジュールが含まれています。

このモジュールを使うことで、追加のインストールなしにCSVファイルを読み書きすることができます。

以下は、csvモジュールを使ってCSVファイルを読み込む基本的な方法です。

import csv
# CSVファイルを開く
with open('example.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    
    # 各行を読み込む
    for row in reader:
        print(row)

このコードでは、example.csvというファイルを読み込み、各行をリストとして出力しています。

csv.readerを使うことで、CSVファイルの内容を簡単に操作することができます。

pandasライブラリの紹介

pandasは、データ解析やデータ操作を効率的に行うための強力なライブラリです。

特に、CSVファイルの読み込みや書き込み、データのフィルタリング、集計などが非常に簡単に行えます。

pip install pandasでインストールする必要があります。

以下は、pandasを使ってCSVファイルを読み込む基本的な方法です。

import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('example.csv')
# データフレームの内容を表示
print(df)

このコードでは、example.csvというファイルを読み込み、データフレームとして出力しています。

pandasread_csv関数を使うことで、CSVファイルの内容をデータフレーム形式で簡単に操作することができます。

pandasを使うことで、データのフィルタリングや集計、グラフの作成など、より高度なデータ解析が可能になります。

例えば、特定の列だけを抽出したり、条件に合致する行だけを選択したりすることが簡単にできます。

# 特定の列を抽出
selected_columns = df[['Column1', 'Column2']]
# 条件に合致する行を抽出
filtered_rows = df[df['Column1'] > 10]
print(selected_columns)
print(filtered_rows)

このように、csvモジュールとpandasライブラリを使うことで、CSVファイルの操作が非常に簡単になります。

次のセクションでは、これらのツールを使って特定の行を指定してCSVファイルを読み込む方法について詳しく解説します。

csvモジュールを使った行の指定読み込み

Pythonの標準ライブラリであるcsvモジュールを使うと、CSVファイルの読み書きが簡単に行えます。

このセクションでは、csv.readerを使った基本的なCSVファイルの読み込み方法と、特定の行を指定して読み込む方法について解説します。

csv.readerの基本的な使い方

まずは、csv.readerを使ってCSVファイルを読み込む基本的な方法を見てみましょう。

以下のコードは、CSVファイルを読み込んでその内容を表示する例です。

import csv
# CSVファイルのパスを指定
csv_file_path = 'example.csv'
# CSVファイルを開く
with open(csv_file_path, mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    
    # 各行を読み込んで表示
    for row in reader:
        print(row)

このコードでは、open関数を使ってCSVファイルを開き、csv.readerを使ってファイルの内容を読み込んでいます。

forループを使って各行を順番に読み込み、print関数で表示しています。

特定の行を読み込む方法

CSVファイルから特定の行を読み込む方法には、行番号を指定する方法と条件を指定する方法があります。

それぞれの方法について詳しく見ていきましょう。

行番号を指定して読み込む

行番号を指定して特定の行を読み込むには、enumerate関数を使うと便利です。

以下のコードは、特定の行番号を指定してその行を読み込む例です。

import csv
# CSVファイルのパスを指定
csv_file_path = 'example.csv'
# 読み込みたい行番号を指定(例: 3行目)
target_row_number = 3
# CSVファイルを開く
with open(csv_file_path, mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    
    # 各行を読み込んで行番号をチェック
    for i, row in enumerate(reader):
        if i == target_row_number - 1:  # 行番号は0から始まるため-1する
            print(row)
            break

このコードでは、enumerate関数を使って各行の行番号を取得し、指定した行番号と一致する行を見つけたらその行を表示しています。

条件を指定して読み込む

条件を指定して特定の行を読み込むには、if文を使って条件をチェックします。

以下のコードは、特定の条件に一致する行を読み込む例です。

import csv
# CSVファイルのパスを指定
csv_file_path = 'example.csv'
# 読み込みたい条件を指定(例: 2列目の値が 'Python')
target_value = 'Python'
target_column_index = 1  # 列番号は0から始まるため1は2列目を指す
# CSVファイルを開く
with open(csv_file_path, mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    
    # 各行を読み込んで条件をチェック
    for row in reader:
        if row[target_column_index] == target_value:
            print(row)

このコードでは、各行の指定した列の値が条件に一致するかどうかをチェックし、一致する行を表示しています。

以上が、csvモジュールを使った行の指定読み込みの基本的な方法です。

次のセクションでは、pandasライブラリを使った行の指定読み込み方法について解説します。

pandasを使った行の指定読み込み

pandasの基本的な使い方

pandasはPythonでデータ操作を行うための強力なライブラリです。

特に、データフレーム(DataFrame)というデータ構造を使って、表形式のデータを簡単に操作できます。

まずは、pandasをインストールし、基本的な使い方を見ていきましょう。

pip install pandas
# pandasのインポート
import pandas as pd
# サンプルのCSVファイルを読み込む
df = pd.read_csv('sample.csv')
# データフレームの内容を表示
print(df)

read_csv関数の使い方

pandasread_csv関数は、CSVファイルをデータフレームとして読み込むための関数です。

この関数には多くのオプションがあり、特定の行を読み込むために便利なパラメータも含まれています。

skiprowsパラメータの利用

skiprowsパラメータを使うと、指定した行数だけスキップしてCSVファイルを読み込むことができます。

例えば、最初の2行をスキップして読み込みたい場合は以下のようにします。

# 最初の2行をスキップしてCSVファイルを読み込む
df = pd.read_csv('sample.csv', skiprows=2)
# データフレームの内容を表示
print(df)

nrowsパラメータの利用

nrowsパラメータを使うと、指定した行数だけ読み込むことができます。

例えば、最初の5行だけを読み込みたい場合は以下のようにします。

# 最初の5行だけを読み込む
df = pd.read_csv('sample.csv', nrows=5)
# データフレームの内容を表示
print(df)

条件を指定して行を読み込む

pandasでは、条件を指定して特定の行をフィルタリングすることも簡単にできます。

条件付きフィルタリング

例えば、特定の列の値がある条件を満たす行だけを抽出したい場合は以下のようにします。

# 'age'列の値が30以上の行を抽出
df = pd.read_csv('sample.csv')
filtered_df = df[df['age'] >= 30]
# フィルタリングされたデータフレームの内容を表示
print(filtered_df)

複数条件の組み合わせ

複数の条件を組み合わせて行をフィルタリングすることも可能です。

例えば、’age’列の値が30以上で、かつ’salary’列の値が50000以上の行を抽出する場合は以下のようにします。

# 'age'列の値が30以上かつ'salary'列の値が50000以上の行を抽出
df = pd.read_csv('sample.csv')
filtered_df = df[(df['age'] >= 30) & (df['salary'] >= 50000)]
# フィルタリングされたデータフレームの内容を表示
print(filtered_df)

これで、pandasを使って特定の行を指定してCSVファイルを読み込む方法について理解できたと思います。

pandasの強力な機能を活用して、効率的にデータを操作しましょう。

実践例

ここでは、実際にPythonを使ってCSVファイルを読み込む具体的な例を紹介します。

小規模なCSVファイルから大規模なCSVファイルまで、さまざまなシナリオに対応する方法を見ていきましょう。

小規模なCSVファイルの読み込み

小規模なCSVファイルを読み込む場合、csvモジュールやpandasライブラリを使うと簡単に行えます。

以下に、pandasを使った例を示します。

まず、以下のような小規模なCSVファイルを用意します。

name,age,city
Alice,30,New York
Bob,25,Los Angeles
Charlie,35,Chicago

このCSVファイルをdata.csvという名前で保存します。

次に、Pythonコードでこのファイルを読み込みます。

import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('data.csv')
# データフレームを表示
print(df)

実行結果は以下のようになります。

      name  age         city
0    Alice   30     New York
1      Bob   25  Los Angeles
2  Charlie   35      Chicago

このように、pandasを使うと簡単にCSVファイルを読み込んでデータフレームとして扱うことができます。

大規模なCSVファイルの効率的な読み込み

大規模なCSVファイルを読み込む場合、メモリ効率を考慮する必要があります。

pandasread_csv関数には、メモリ効率を向上させるためのオプションがいくつかあります。

例えば、以下のような大規模なCSVファイルを読み込む場合を考えます。

id,name,age,city
1,Alice,30,New York
2,Bob,25,Los Angeles
3,Charlie,35,Chicago
...
1000000,Zoe,28,San Francisco

このCSVファイルをlarge_data.csvという名前で保存します。

次に、Pythonコードでこのファイルを効率的に読み込みます。

import pandas as pd
# CSVファイルをチャンク単位で読み込む
chunk_size = 10000
chunks = pd.read_csv('large_data.csv', chunksize=chunk_size)
# 各チャンクを処理
for chunk in chunks:
    # ここで各チャンクに対する処理を行う
    print(chunk.head())

このコードでは、chunksizeオプションを使ってCSVファイルをチャンク(小さな部分)単位で読み込んでいます。

これにより、メモリ使用量を抑えながら大規模なデータを処理することができます。

特定の列と行を同時に指定して読み込む

特定の列と行を同時に指定してCSVファイルを読み込みたい場合、pandasread_csv関数を使うと便利です。

以下にその方法を示します。

まず、以下のようなCSVファイルを用意します。

id,name,age,city
1,Alice,30,New York
2,Bob,25,Los Angeles
3,Charlie,35,Chicago
4,David,40,Houston
5,Eve,22,Miami

このCSVファイルをdata.csvという名前で保存します。

次に、Pythonコードで特定の列と行を同時に指定して読み込みます。

import pandas as pd
# 特定の列と行を指定してCSVファイルを読み込む
df = pd.read_csv('data.csv', usecols=['name', 'city'], skiprows=[1, 3])
# データフレームを表示
print(df)

実行結果は以下のようになります。

    name         city
0    Bob  Los Angeles
1  David      Houston
2    Eve        Miami

このコードでは、usecolsオプションを使って特定の列(namecity)を指定し、skiprowsオプションを使って特定の行(2行目と4行目)をスキップしています。

このように、pandasを使うと特定の列と行を同時に指定してCSVファイルを読み込むことができます。

これにより、必要なデータだけを効率的に抽出することができます。

エラーハンドリング

CSVファイルを読み込む際には、さまざまなエラーが発生する可能性があります。

ここでは、代表的なエラーとその対処方法について解説します。

ファイルが存在しない場合の対処

ファイルが存在しない場合、Pythonは FileNotFoundError を発生させます。

このエラーをキャッチして適切に対処する方法を見てみましょう。

import csv
file_path = 'non_existent_file.csv'
try:
    with open(file_path, mode='r', encoding='utf-8') as file:
        reader = csv.reader(file)
        for row in reader:
            print(row)
except FileNotFoundError:
    print(f"ファイルが見つかりません: {file_path}")

このコードでは、指定したファイルが存在しない場合に FileNotFoundError をキャッチし、エラーメッセージを表示します。

読み込みエラーの対処

CSVファイルの形式が不正である場合や、読み込み中にエラーが発生した場合には、 csv.Error が発生します。

このエラーをキャッチして対処する方法を見てみましょう。

import csv
file_path = 'corrupted_file.csv'
try:
    with open(file_path, mode='r', encoding='utf-8') as file:
        reader = csv.reader(file)
        for row in reader:
            print(row)
except csv.Error as e:
    print(f"CSV読み込みエラー: {e}")

このコードでは、CSVファイルの読み込み中にエラーが発生した場合に csv.Error をキャッチし、エラーメッセージを表示します。

データの欠損値処理

CSVファイルには、データが欠損している場合があります。

pandas を使用すると、欠損値を簡単に処理することができます。

以下に、欠損値を処理する方法を示します。

import pandas as pd
file_path = 'data_with_missing_values.csv'
try:
    df = pd.read_csv(file_path)
    print("読み込んだデータフレーム:")
    print(df)
    # 欠損値を含む行を削除
    df_dropped = df.dropna()
    print("\n欠損値を含む行を削除したデータフレーム:")
    print(df_dropped)
    # 欠損値を特定の値で埋める
    df_filled = df.fillna(0)
    print("\n欠損値を0で埋めたデータフレーム:")
    print(df_filled)
except FileNotFoundError:
    print(f"ファイルが見つかりません: {file_path}")
except pd.errors.EmptyDataError:
    print("CSVファイルが空です")
except pd.errors.ParserError:
    print("CSVファイルの解析中にエラーが発生しました")

このコードでは、 pandas を使用してCSVファイルを読み込み、欠損値を含む行を削除したり、欠損値を特定の値(ここでは0)で埋めたりする方法を示しています。

また、ファイルが存在しない場合や、ファイルが空の場合、解析中にエラーが発生した場合のエラーハンドリングも行っています。

以上のように、CSVファイルを読み込む際にはさまざまなエラーが発生する可能性がありますが、適切にエラーハンドリングを行うことで、プログラムの安定性を向上させることができます。

目次から探す