【Python】csvファイルの扱い方を詳しく解説

この記事では、Pythonの標準ライブラリであるcsvモジュールと、データ解析に強力なpandasライブラリを使って、CSVファイルの読み込み、書き込み、追記、そして高度なデータ操作方法をわかりやすく解説します。

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

目次から探す

PythonでCSVファイルを扱うための準備

PythonでCSVファイルを扱うためには、いくつかのライブラリを使用します。

ここでは、標準ライブラリであるcsvモジュールと、データ解析に強力なpandasライブラリについて説明します。

必要なライブラリ

csvモジュール

csvモジュールは、Pythonの標準ライブラリの一部であり、追加のインストールなしで使用できます。

このモジュールは、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)
# CSVファイルの書き込み
with open('example.csv', mode='w', encoding='utf-8', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['Name', 'Age', 'City'])
    writer.writerow(['Alice', '30', 'New York'])
    writer.writerow(['Bob', '25', 'Los Angeles'])

pandasライブラリ

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

pandasを使用すると、CSVファイルの読み書きが非常に簡単になります。

特に、大量のデータを扱う場合や、データのフィルタリング、集計、変換などの操作を行う場合に便利です。

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

import pandas as pd
# CSVファイルの読み込み
df = pd.read_csv('example.csv')
print(df)
# CSVファイルの書き込み
df.to_csv('example_output.csv', index=False)

ライブラリのインストール方法

csvモジュールはPythonの標準ライブラリの一部であるため、特別なインストールは不要です。

しかし、pandasライブラリは標準ライブラリではないため、インストールが必要です。

pandasをインストールするには、以下のコマンドを使用します。

pip install pandas

このコマンドを実行すると、pandasライブラリがインストールされ、すぐに使用できるようになります。

以上で、PythonでCSVファイルを扱うための基本的な準備が整いました。

次のセクションでは、具体的なCSVファイルの操作方法について詳しく解説していきます。

csvモジュールを使ったCSVファイルの操作

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

このセクションでは、csvモジュールを使った基本的なCSVファイルの操作方法について解説します。

CSVファイルの読み込み

csv.readerの使い方

csv.readerを使うと、CSVファイルを簡単に読み込むことができます。

以下に基本的な使い方を示します。

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

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

with文を使うことで、ファイルのクローズを自動的に行います。

読み込んだデータの処理方法

読み込んだデータをリストとして扱うことで、様々な処理が可能です。

例えば、特定の列のデータを抽出する場合は以下のようにします。

import csv
# CSVファイルを開く
with open('example.csv', 'r', encoding='utf-8') as file:
    reader = csv.reader(file)
    
    # ヘッダーをスキップ
    next(reader)
    
    # 特定の列(例:2列目)のデータを抽出
    for row in reader:
        print(row[1])

このコードでは、ヘッダー行をスキップし、2列目のデータだけを抽出して出力しています。

CSVファイルの書き込み

csv.writerの使い方

csv.writerを使うと、CSVファイルにデータを書き込むことができます。

以下に基本的な使い方を示します。

import csv
# 書き込むデータ
data = [
    ['Name', 'Age', 'City'],
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'Los Angeles'],
    ['Charlie', '35', 'Chicago']
]
# CSVファイルを開く
with open('output.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    
    # データを書き込む
    writer.writerows(data)

このコードでは、output.csvというファイルにデータを書き込んでいます。

newline=''を指定することで、Windows環境でも正しく改行されます。

データの書き込み方法

csv.writerを使うと、1行ずつデータを書き込むことも可能です。

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

import csv
# 書き込むデータ
header = ['Name', 'Age', 'City']
rows = [
    ['Alice', '30', 'New York'],
    ['Bob', '25', 'Los Angeles'],
    ['Charlie', '35', 'Chicago']
]
# CSVファイルを開く
with open('output.csv', 'w', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    
    # ヘッダーを書き込む
    writer.writerow(header)
    
    # 各行を書き込む
    for row in rows:
        writer.writerow(row)

このコードでは、まずヘッダー行を書き込み、その後に各行のデータを書き込んでいます。

CSVファイルの追記

追記モードの使い方

既存のCSVファイルにデータを追記する場合は、ファイルを開く際にモードを'a'(追記モード)に設定します。

import csv
# 追記するデータ
new_rows = [
    ['David', '40', 'San Francisco'],
    ['Eve', '28', 'Boston']
]
# CSVファイルを開く(追記モード)
with open('output.csv', 'a', newline='', encoding='utf-8') as file:
    writer = csv.writer(file)
    
    # 新しい行を追記
    writer.writerows(new_rows)

このコードでは、output.csvに新しい行を追記しています。

追記時の注意点

追記モードでファイルを開く際には、以下の点に注意が必要です。

  1. ファイルの存在確認: 追記モードでは、ファイルが存在しない場合は新しく作成されますが、既存のファイルがある場合はその内容が保持されます。
  2. データの整合性: 追記するデータの形式が既存のデータと一致していることを確認してください。

列数やデータ型が異なると、データの整合性が崩れる可能性があります。

以上が、csvモジュールを使った基本的なCSVファイルの操作方法です。

次のセクションでは、pandasライブラリを使ったCSVファイルの操作方法について解説します。

pandasを使ったCSVファイルの操作

pandasの基本

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

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

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

CSVファイルの読み込み

pandas.read_csvの使い方

pandasでCSVファイルを読み込むには、pandas.read_csv関数を使用します。

この関数は、CSVファイルをデータフレームとして読み込みます。

以下に基本的な使い方を示します。

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

読み込んだデータの処理方法

読み込んだデータはデータフレームとして扱われます。

データフレームを使って、特定の列や行の抽出、データのフィルタリング、集計などが簡単に行えます。

# 特定の列を抽出
print(df['column_name'])
# 条件に基づくフィルタリング
filtered_df = df[df['column_name'] > 10]
print(filtered_df)
# データの集計
grouped_df = df.groupby('column_name').sum()
print(grouped_df)

CSVファイルの書き込み

DataFrame.to_csvの使い方

データフレームをCSVファイルに書き込むには、DataFrame.to_csvメソッドを使用します。

このメソッドを使うことで、データフレームの内容を簡単にCSVファイルとして保存できます。

# データフレームをCSVファイルに書き込む
df.to_csv('output.csv', index=False)

データの書き込み方法

データフレームをCSVファイルに書き込む際には、いくつかのオプションを指定することができます。

例えば、index=Falseを指定すると、データフレームのインデックスがCSVファイルに書き込まれません。

# インデックスを含めずにCSVファイルに書き込む
df.to_csv('output.csv', index=False)
# 特定の列のみをCSVファイルに書き込む
df.to_csv('output.csv', columns=['column1', 'column2'], index=False)

CSVファイルの追記

追記モードの使い方

pandasでは、直接的にCSVファイルに追記する機能は提供されていません。

しかし、mode='a'(appendモード)を使って、既存のCSVファイルにデータを追記することができます。

# データフレームをCSVファイルに追記する
df.to_csv('output.csv', mode='a', header=False, index=False)

追記時の注意点

追記する際には、いくつかの注意点があります。

例えば、header=Falseを指定しないと、追記するたびにヘッダー行が追加されてしまいます。

また、データの整合性を保つために、追記するデータフレームの列名が既存のCSVファイルと一致していることを確認する必要があります。

# 追記するデータフレームの列名が一致していることを確認
new_data = pd.DataFrame({
    'column1': [value1, value2],
    'column2': [value3, value4]
})
# 追記
new_data.to_csv('output.csv', mode='a', header=False, index=False)

以上が、pandasを使ったCSVファイルの基本的な操作方法です。

pandasを使うことで、CSVファイルの読み込み、書き込み、追記が非常に簡単に行えるようになります。

CSVファイルの高度な操作

CSVファイルを扱う際には、基本的な読み書きだけでなく、特定の列や行の抽出、データのフィルタリング、集計と分析などの高度な操作が必要になることがあります。

ここでは、csvモジュールとpandasを使った高度な操作方法について詳しく解説します。

特定の列や行の抽出

csvモジュールでの抽出方法

csvモジュールを使って特定の列や行を抽出する方法を見てみましょう。

以下の例では、CSVファイルから特定の列を抽出する方法を示します。

import csv
# CSVファイルを読み込む
with open('sample.csv', mode='r', encoding='utf-8') as file:
    reader = csv.reader(file)
    header = next(reader)  # ヘッダー行を読み込む
    column_index = header.index('特定の列名')  # 抽出したい列のインデックスを取得
    for row in reader:
        print(row[column_index])  # 特定の列のデータを出力

このコードでは、まずCSVファイルを読み込み、ヘッダー行から特定の列のインデックスを取得します。

その後、各行からその列のデータを抽出して出力します。

pandasでの抽出方法

pandasを使うと、特定の列や行の抽出が非常に簡単になります。

以下の例では、pandasを使って特定の列を抽出する方法を示します。

import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('sample.csv')
# 特定の列を抽出
specific_column = df['特定の列名']
print(specific_column)

このコードでは、read_csv関数を使ってCSVファイルを読み込み、特定の列を抽出して出力します。

データのフィルタリング

条件に基づくフィルタリング

データのフィルタリングは、特定の条件に基づいてデータを抽出する操作です。

csvモジュールとpandasを使ったフィルタリング方法を見てみましょう。

csvモジュールでのフィルタリング
import csv
# CSVファイルを読み込む
with open('sample.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    
    for row in reader:
        if int(row['年齢']) > 30:  # 年齢が30歳以上のデータを抽出
            print(row)

このコードでは、DictReaderを使ってCSVファイルを読み込み、年齢が30歳以上のデータを抽出して出力します。

pandasでのフィルタリング
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('sample.csv')
# 年齢が30歳以上のデータを抽出
filtered_data = df[df['年齢'] > 30]
print(filtered_data)

このコードでは、pandasを使って年齢が30歳以上のデータを抽出して出力します。

複数条件のフィルタリング

複数の条件に基づいてデータをフィルタリングする方法を見てみましょう。

csvモジュールでの複数条件フィルタリング
import csv
# CSVファイルを読み込む
with open('sample.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    
    for row in reader:
        if int(row['年齢']) > 30 and row['性別'] == '男性':  # 年齢が30歳以上かつ性別が男性のデータを抽出
            print(row)
pandasでの複数条件フィルタリング
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('sample.csv')
# 年齢が30歳以上かつ性別が男性のデータを抽出
filtered_data = df[(df['年齢'] > 30) & (df['性別'] == '男性')]
print(filtered_data)

データの集計と分析

基本的な集計方法

データの集計は、データセット全体の統計情報を取得するために使用されます。

csvモジュールとpandasを使った基本的な集計方法を見てみましょう。

csvモジュールでの集計
import csv
total_age = 0
count = 0
# CSVファイルを読み込む
with open('sample.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    
    for row in reader:
        total_age += int(row['年齢'])
        count += 1
average_age = total_age / count
print(f'平均年齢: {average_age}')
pandasでの集計
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('sample.csv')
# 平均年齢を計算
average_age = df['年齢'].mean()
print(f'平均年齢: {average_age}')

グループ化と集計

データを特定の列でグループ化し、各グループごとに集計を行う方法を見てみましょう。

csvモジュールでのグループ化と集計
import csv
from collections import defaultdict
age_by_gender = defaultdict(list)
# CSVファイルを読み込む
with open('sample.csv', mode='r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    
    for row in reader:
        age_by_gender[row['性別']].append(int(row['年齢']))
for gender, ages in age_by_gender.items():
    average_age = sum(ages) / len(ages)
    print(f'{gender}の平均年齢: {average_age}')
pandasでのグループ化と集計
import pandas as pd
# CSVファイルを読み込む
df = pd.read_csv('sample.csv')
# 性別ごとの平均年齢を計算
grouped_data = df.groupby('性別')['年齢'].mean()
print(grouped_data)

以上が、CSVファイルの高度な操作方法です。

csvモジュールとpandasを使い分けることで、さまざまなデータ操作が可能になります。

ぜひ、実際のプロジェクトで活用してみてください。

目次から探す