【Python】既存のCSVに追記する方法

この記事では、Pythonの標準ライブラリであるcsvモジュールと、データ解析に便利なpandasライブラリを使って、CSVファイルにデータを追加する方法をわかりやすく解説します。

具体的なコード例や注意点も紹介するので、初心者の方でも安心して取り組むことができます。

目次から探す

既存のCSVファイルに追記する方法

Pythonでは、既存のCSVファイルにデータを追記する方法がいくつかあります。

ここでは、標準ライブラリのcsvモジュールと、データ解析に便利なpandasライブラリを使った方法を紹介します。

csvモジュールを使った追記方法

open関数とモード指定

まず、CSVファイルを開くためにopen関数を使用します。

ファイルを追記モードで開くためには、モードを'a'(append)に指定します。

以下はその例です。

with open('example.csv', 'a', newline='') as file:
    # ここに追記するコードを記述

csv.writerを使った追記

次に、csv.writerを使ってデータを追記します。

csv.writerは、CSVファイルに行を追加するための便利なメソッドを提供します。

import csv
with open('example.csv', 'a', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['新しいデータ1', '新しいデータ2'])

実際のコード例

以下に、実際のコード例を示します。

このコードは、既存のCSVファイルに新しい行を追記します。

import csv
# 追記するデータ
new_data = [
    ['新しいデータ1', '新しいデータ2'],
    ['新しいデータ3', '新しいデータ4']
]
# CSVファイルを追記モードで開く
with open('example.csv', 'a', newline='') as file:
    writer = csv.writer(file)
    for row in new_data:
        writer.writerow(row)

pandasライブラリを使った追記方法

pandasのインストール

pandasライブラリを使用するには、まずインストールが必要です。

以下のコマンドを実行してインストールします。

pip install pandas

pandas.DataFrameの作成

次に、追記するデータをpandas.DataFrameとして作成します。

DataFrameは、表形式のデータを扱うための便利なデータ構造です。

import pandas as pd
# 追記するデータをDataFrameとして作成
new_data = pd.DataFrame({
    '列1': ['新しいデータ1', '新しいデータ3'],
    '列2': ['新しいデータ2', '新しいデータ4']
})

DataFrame.to_csvメソッドを使った追記

DataFrame.to_csvメソッドを使って、既存のCSVファイルにデータを追記します。

このメソッドには、mode='a'header=Falseのオプションを指定します。

new_data.to_csv('example.csv', mode='a', header=False, index=False)

実際のコード例

以下に、実際のコード例を示します。

このコードは、既存のCSVファイルに新しいデータを追記します。

import pandas as pd
# 追記するデータをDataFrameとして作成
new_data = pd.DataFrame({
    '列1': ['新しいデータ1', '新しいデータ3'],
    '列2': ['新しいデータ2', '新しいデータ4']
})
# 既存のCSVファイルにデータを追記
new_data.to_csv('example.csv', mode='a', header=False, index=False)

以上が、Pythonを使って既存のCSVファイルにデータを追記する方法です。

csvモジュールとpandasライブラリのどちらを使うかは、用途やデータの規模に応じて選択してください。

追記時の注意点

既存のCSVファイルにデータを追記する際には、いくつかの注意点があります。

これらのポイントを押さえておくことで、データの整合性を保ちつつ、効率的に作業を進めることができます。

ファイルのモード指定

CSVファイルに追記する際には、ファイルを開くモードを正しく指定することが重要です。

Pythonのopen関数では、以下のようなモードを指定することができます。

モード説明
‘r’読み込み専用
‘w’書き込み専用 (既存の内容は削除される)
‘a’追記専用 (既存の内容は保持される)

追記を行う場合は、必ずモードを'a'に設定します。

これにより、既存のデータを保持しつつ、新しいデータを追加することができます。

with open('example.csv', 'a', newline='') as file:
    writer = csv.writer(file)
    writer.writerow(['新しいデータ1', '新しいデータ2'])

ヘッダー行の扱い

CSVファイルには通常、最初の行にヘッダー(列名)が含まれています。

追記する際には、このヘッダー行を重複して書き込まないように注意が必要です。

csvモジュールやpandasライブラリを使用する場合、ヘッダー行をスキップする設定が可能です。

csvモジュールの場合

csv.writerを使用する際には、ヘッダー行を手動で管理する必要があります。

追記時にはヘッダー行を書き込まないようにします。

with open('example.csv', 'a', newline='') as file:
    writer = csv.writer(file)
    # ヘッダー行は書き込まない
    writer.writerow(['新しいデータ1', '新しいデータ2'])

pandasライブラリの場合

pandasto_csvメソッドを使用する場合、header引数をFalseに設定することで、ヘッダー行をスキップできます。

import pandas as pd
# 追記するデータをDataFrameとして作成
new_data = pd.DataFrame({
    '列1': ['新しいデータ1'],
    '列2': ['新しいデータ2']
})
# 既存のCSVファイルに追記
new_data.to_csv('example.csv', mode='a', header=False, index=False)

データの整合性

追記するデータが既存のデータと整合性を保つようにすることも重要です。

具体的には、以下の点に注意します。

  • 列の順序と名前: 追記するデータの列の順序と名前が既存のデータと一致していることを確認します。
  • データ型: 各列のデータ型が一致していることを確認します。

例えば、数値データの列に文字列データを追加しないようにします。

  • 重複データ: 既存のデータと重複するデータがないか確認します。

重複データがある場合は、適切に処理する必要があります。

これらの注意点を守ることで、CSVファイルのデータが一貫性を保ち、後続のデータ処理や分析がスムーズに行えるようになります。

応用例

複数行の追記

既存のCSVファイルに複数行を一度に追記する方法について解説します。

複数行のデータを一度に追記することで、効率的にデータを追加することができます。

csvモジュールを使った複数行の追記

csvモジュールを使って複数行を追記する場合、writerowsメソッドを使用します。

以下に具体的なコード例を示します。

import csv
# 追記するデータ
data = [
    ["John", "Doe", 28],
    ["Jane", "Smith", 34],
    ["Emily", "Jones", 22]
]
# 既存のCSVファイルに追記
with open('example.csv', 'a', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(data)

このコードでは、example.csvという既存のCSVファイルに3行のデータを追記しています。

pandasを使った複数行の追記

pandasを使って複数行を追記する場合、DataFrameを作成し、それをCSVファイルに追記します。

import pandas as pd
# 追記するデータ
data = {
    "First Name": ["John", "Jane", "Emily"],
    "Last Name": ["Doe", "Smith", "Jones"],
    "Age": [28, 34, 22]
}
# DataFrameの作成
df = pd.DataFrame(data)
# 既存のCSVファイルに追記
df.to_csv('example.csv', mode='a', header=False, index=False)

このコードでは、example.csvという既存のCSVファイルに3行のデータを追記しています。

条件付き追記

条件付きでデータを追記する方法について解説します。

例えば、特定の条件を満たすデータのみを追記したい場合に有効です。

csvモジュールを使った条件付き追記

以下のコード例では、年齢が30歳以上のデータのみを追記しています。

import csv
# 追記するデータ
data = [
    ["John", "Doe", 28],
    ["Jane", "Smith", 34],
    ["Emily", "Jones", 22]
]
# 条件付きでデータをフィルタリング
filtered_data = [row for row in data if row[2] >= 30]
# 既存のCSVファイルに追記
with open('example.csv', 'a', newline='') as file:
    writer = csv.writer(file)
    writer.writerows(filtered_data)

pandasを使った条件付き追記

pandasを使って条件付きでデータを追記する場合、DataFrameをフィルタリングしてからCSVファイルに追記します。

import pandas as pd
# 追記するデータ
data = {
    "First Name": ["John", "Jane", "Emily"],
    "Last Name": ["Doe", "Smith", "Jones"],
    "Age": [28, 34, 22]
}
# DataFrameの作成
df = pd.DataFrame(data)
# 条件付きでデータをフィルタリング
filtered_df = df[df["Age"] >= 30]
# 既存のCSVファイルに追記
filtered_df.to_csv('example.csv', mode='a', header=False, index=False)

大規模データの効率的な追記

大規模なデータを効率的に追記する方法について解説します。

大量のデータを一度に処理する場合、メモリ効率や処理速度を考慮する必要があります。

csvモジュールを使った大規模データの追記

大規模データを扱う場合、データを分割して少しずつ追記する方法が有効です。

import csv
# 追記する大規模データ(例として10000行のデータを生成)
data = [["Name" + str(i), "Surname" + str(i), i] for i in range(10000)]
# データを分割して追記
chunk_size = 1000
for i in range(0, len(data), chunk_size):
    chunk = data[i:i + chunk_size]
    with open('example.csv', 'a', newline='') as file:
        writer = csv.writer(file)
        writer.writerows(chunk)

pandasを使った大規模データの追記

pandasを使って大規模データを効率的に追記する場合、chunksizeオプションを利用します。

import pandas as pd
# 追記する大規模データ(例として10000行のデータを生成)
data = {
    "First Name": ["Name" + str(i) for i in range(10000)],
    "Last Name": ["Surname" + str(i) for i in range(10000)],
    "Age": [i for i in range(10000)]
}
# DataFrameの作成
df = pd.DataFrame(data)
# データを分割して追記
df.to_csv('example.csv', mode='a', header=False, index=False, chunksize=1000)

このように、chunksizeオプションを使うことで、大規模データを効率的に追記することができます。

目次から探す