PythonでCSVファイルのデータを特定条件でフィルタリングする方法

この記事では、Pythonを使用してCSVファイルのデータを特定の条件でフィルタリングする方法を解説します。具体的なコード例とその解説、さらには応用例までを包括的に扱います。

目次

はじめに

CSVファイルはデータの取り扱いに広く使用されていますが、特定の条件でデータをフィルタリングする必要がしばしばあります。Pythonの標準ライブラリである`csv`を使用し、そのようなケースでの解決策を具体的に見ていきましょう。

基本的なコード

まずは基本的なコードから始めます。

# CSVファイルを読み込む
import csv

# 読み込みファイルと書き込みファイルを指定
input_file = 'input.csv'
output_file = 'output.csv'

# フィルタリング条件(この例では3列目の値が10以上)
def filter_condition(row):
    return int(row[2]) >= 10

# フィルタリング処理
with open(input_file, 'r') as infile, open(output_file, 'w', newline='') as outfile:
    csvreader = csv.reader(infile)
    csvwriter = csv.writer(outfile)

    for row in csvreader:
        if filter_condition(row):
            csvwriter.writerow(row)

コードの解説

このコードは大きく分けて以下の部分から構成されています。

1. `csv`モジュールをインポート
2. 読み込みと書き込みのCSVファイルを指定
3. フィルタリング条件を関数で定義
4. ファイルの読み込みと書き込み処理

関数filter_conditionの役割

`filter_condition`関数では、3列目の値(`row[2]`)が10以上であるかどうかを判定しています。この関数を変更することで、フィルタリングの条件を自由に設定できます。

応用例

基本的なコードを理解したら、次は応用例です。以下に、実用的な3つの例を示します。

応用例1:複数条件のフィルタリング

2つ以上の条件でフィルタリングする場合の例です。

# 複数条件でのフィルタリング(この例では3列目が10以上かつ5列目が'A')
def multiple_filter_condition(row):
    return int(row[2]) >= 10 and row[4] == 'A'

# フィルタリング処理は基本的なコードと同じ

応用例2:日付でのフィルタリング

特定の日付範囲内のデータだけを抽出する場合の例です。

# 日付でのフィルタリング(この例では1列目が2023-01-01以降)
from datetime import datetime

def date_filter_condition(row):
    return datetime.strptime(row[0], '%Y-%m-%d') >= datetime(2023, 1, 1)

# フィルタリング処理は基本的なコードと同じ

応用例3:テキストマッチングでのフィルタリング

正規表現を用いてテキストマッチングでフィルタリングする場合の例です。

# 正規表現でのテキストマッチング(この例では2列目が'apple'を含む)
import re

def regex_filter_condition(row):
    return re.search('apple', row[1])

# フィルタリング処理は基本的なコードと同じ

まとめ

この記事では、Pythonを使ってCSVファイルから特定の条件に一致するデータをフィルタリングする方法を学びました。基本的なコード例から応用例まで紹介し、いかにPythonがこのようなデータ処理に強力であるかを実感していただけたと思います。

コメント

コメントする

目次