Pandas

[Python] Pandas – Excelでセルを指定して抽出・編集する方法

Pandasを使用してExcelファイルの特定のセルを抽出・編集するには、まずread_excel()でExcelファイルをDataFrameとして読み込みます。

セルの指定は、行と列のインデックスやラベルを使って行います。

例えば、df.at[row, col]df.iat[row_idx, col_idx]で特定のセルにアクセスできます。

編集も同様に、これらのメソッドを使って値を変更し、to_excel()で保存します。

Excelの特定のセルを抽出する方法

Pandasを使用すると、Excelファイルから特定のセルを簡単に抽出できます。

以下では、行と列を指定してセルを抽出する方法、複数のセルを抽出する方法、条件に基づいてセルを抽出する方法について解説します。

行と列を指定してセルを抽出する方法

Pandasでは、atiatを使って特定のセルを抽出できます。

atを使ったラベル指定での抽出

atメソッドは、行ラベルと列ラベルを指定して特定のセルを抽出するために使用します。

以下はその例です。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 行ラベルと列ラベルを指定してセルを抽出
cell_value = df.at[1, 'ColumnA']  # 1行目のColumnAの値を取得
print(cell_value)
抽出した値

iatを使ったインデックス指定での抽出

iatメソッドは、行インデックスと列インデックスを指定して特定のセルを抽出します。

以下はその例です。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 行インデックスと列インデックスを指定してセルを抽出
cell_value = df.iat[1, 0]  # 1行目の0列目の値を取得
print(cell_value)
抽出した値

複数のセルを抽出する方法

複数のセルを抽出する場合は、locilocを使用します。

locを使ったラベル指定での範囲抽出

locメソッドを使用すると、行ラベルと列ラベルを指定して範囲を抽出できます。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 行ラベルと列ラベルを指定して範囲を抽出
subset = df.loc[1:3, ['ColumnA', 'ColumnB']]  # 1行目から3行目までのColumnAとColumnBを取得
print(subset)
ColumnA  ColumnB
1  値1      値2
2  値3      値4
3  値5      値6

ilocを使ったインデックス指定での範囲抽出

ilocメソッドを使用すると、行インデックスと列インデックスを指定して範囲を抽出できます。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 行インデックスと列インデックスを指定して範囲を抽出
subset = df.iloc[1:4, 0:2]  # 1行目から3行目までの0列目と1列目を取得
print(subset)
ColumnA  ColumnB
1  値1      値2
2  値3      値4
3  値5      値6

条件に基づいてセルを抽出する方法

条件に基づいてセルを抽出することも可能です。

条件付き抽出の基本

特定の条件を満たすセルを抽出するには、Booleanインデクシングを使用します。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 条件に基づいてセルを抽出
filtered_data = df[df['ColumnA'] > 10]  # ColumnAの値が10より大きい行を抽出
print(filtered_data)
ColumnA  ColumnB
2  値3      値4
3  値5      値6

複数条件での抽出方法

複数の条件を組み合わせてセルを抽出することもできます。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 複数条件に基づいてセルを抽出
filtered_data = df[(df['ColumnA'] > 10) & (df['ColumnB'] < 5)]  # ColumnAが10より大きく、ColumnBが5より小さい行を抽出
print(filtered_data)
ColumnA  ColumnB
3  値5      値4

これらの方法を使うことで、Pandasを利用してExcelファイルから特定のセルを効率的に抽出することができます。

Excelの特定のセルを編集する方法

Pandasを使用すると、Excelファイル内の特定のセルを簡単に編集できます。

以下では、atiatを使ったセルの編集方法、複数のセルを一括で編集する方法、条件に基づいてセルを編集する方法について解説します。

atを使ったセルの編集

atメソッドを使用すると、行ラベルと列ラベルを指定して特定のセルを編集できます。

以下はその例です。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 行ラベルと列ラベルを指定してセルを編集
df.at[1, 'ColumnA'] = '新しい値'  # 1行目のColumnAの値を編集
print(df.at[1, 'ColumnA'])
新しい値

iatを使ったセルの編集

iatメソッドを使用すると、行インデックスと列インデックスを指定して特定のセルを編集できます。

以下はその例です。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 行インデックスと列インデックスを指定してセルを編集
df.iat[1, 0] = '新しい値'  # 1行目の0列目の値を編集
print(df.iat[1, 0])
新しい値

複数のセルを一括で編集する方法

複数のセルを一括で編集する場合は、locilocを使用します。

locを使った範囲編集

locメソッドを使用すると、行ラベルと列ラベルを指定して範囲を一括編集できます。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 行ラベルと列ラベルを指定して範囲を編集
df.loc[1:3, 'ColumnA'] = ['値1', '値2', '値3']  # 1行目から3行目までのColumnAを一括編集
print(df.loc[1:3, 'ColumnA'])
1    値1
2    値2
3    値3
Name: ColumnA, dtype: object

ilocを使った範囲編集

ilocメソッドを使用すると、行インデックスと列インデックスを指定して範囲を一括編集できます。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 行インデックスと列インデックスを指定して範囲を編集
df.iloc[1:4, 0] = ['値1', '値2', '値3']  # 1行目から3行目までの0列目を一括編集
print(df.iloc[1:4, 0])
1    値1
2    値2
3    値3
Name: ColumnA, dtype: object

条件に基づいてセルを編集する方法

条件に基づいてセルを編集することも可能です。

条件付き編集の基本

特定の条件を満たすセルを編集するには、Booleanインデクシングを使用します。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 条件に基づいてセルを編集
df.loc[df['ColumnA'] > 10, 'ColumnB'] = '新しい値'  # ColumnAの値が10より大きい行のColumnBを編集
print(df[df['ColumnA'] > 10])
ColumnA  ColumnB
2  値3      新しい値
3  値5      新しい値

複数条件での編集方法

複数の条件を組み合わせてセルを編集することもできます。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# 複数条件に基づいてセルを編集
df.loc[(df['ColumnA'] > 10) & (df['ColumnB'] < 5), 'ColumnC'] = '新しい値'  # 条件を満たす行のColumnCを編集
print(df[(df['ColumnA'] > 10) & (df['ColumnB'] < 5)])
ColumnA  ColumnB  ColumnC
3  値5      値4      新しい値

これらの方法を使うことで、Pandasを利用してExcelファイル内の特定のセルを効率的に編集することができます。

Excelファイルの保存と書き出し

Pandasを使用すると、編集したDataFrameをExcelファイルに保存したり、複数のシートを含むExcelファイルを作成したりすることができます。

以下では、編集後のDataFrameをExcelに保存する方法、複数のシートを含むExcelファイルの書き出し、既存のExcelファイルに追記する方法、書式やフォーマットを保持して保存する方法について解説します。

編集後のDataFrameをExcelに保存する方法

編集したDataFrameをExcelファイルに保存するには、to_excelメソッドを使用します。

以下はその例です。

import pandas as pd
# DataFrameを作成
data = {
    'ColumnA': [1, 2, 3],
    'ColumnB': ['A', 'B', 'C']
}
df = pd.DataFrame(data)
# 編集後のDataFrameをExcelファイルに保存
df.to_excel('output.xlsx', index=False)  # インデックスを保存しない

このコードを実行すると、output.xlsxという名前のExcelファイルが作成され、DataFrameの内容が保存されます。

複数のシートを含むExcelファイルの書き出し

複数のDataFrameを異なるシートに書き出すには、ExcelWriterを使用します。

以下はその例です。

import pandas as pd
# DataFrameを作成
data1 = {
    'ColumnA': [1, 2, 3],
    'ColumnB': ['A', 'B', 'C']
}
data2 = {
    'ColumnX': [10, 20, 30],
    'ColumnY': ['X', 'Y', 'Z']
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# ExcelWriterを使用して複数のシートに書き出す
with pd.ExcelWriter('multi_sheet_output.xlsx') as writer:
    df1.to_excel(writer, sheet_name='Sheet1', index=False)
    df2.to_excel(writer, sheet_name='Sheet2', index=False)

このコードを実行すると、multi_sheet_output.xlsxという名前のExcelファイルが作成され、Sheet1df1Sheet2df2が保存されます。

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

既存のExcelファイルに新しいデータを追記するには、openpyxlエンジンを使用してExcelWriterを開き、mode='a'を指定します。

以下はその例です。

import pandas as pd
# 新しいDataFrameを作成
new_data = {
    'ColumnA': [4, 5],
    'ColumnB': ['D', 'E']
}
new_df = pd.DataFrame(new_data)
# 既存のExcelファイルに追記
with pd.ExcelWriter('output.xlsx', mode='a', engine='openpyxl') as writer:
    new_df.to_excel(writer, sheet_name='Sheet1', index=False, header=False)  # ヘッダーを追加しない

このコードを実行すると、output.xlsxSheet1に新しいデータが追記されます。

書式やフォーマットを保持して保存する方法

Pandasのto_excelメソッドでは、書式やフォーマットを保持することはできませんが、openpyxlライブラリを使用してExcelファイルを操作することで、書式を保持したまま保存することが可能です。

以下はその例です。

import pandas as pd
from openpyxl import load_workbook
# 既存のExcelファイルを読み込む
book = load_workbook('output.xlsx')
writer = pd.ExcelWriter('output_with_format.xlsx', engine='openpyxl')
writer.book = book
# DataFrameを作成
data = {
    'ColumnA': [1, 2, 3],
    'ColumnB': ['A', 'B', 'C']
}
df = pd.DataFrame(data)
# DataFrameを既存のExcelファイルに書き出す
df.to_excel(writer, sheet_name='Sheet1', index=False)
# 書式を保持して保存
writer.save()

このコードを実行すると、output_with_format.xlsxという名前のExcelファイルが作成され、既存の書式やフォーマットが保持されます。

これらの方法を使うことで、Pandasを利用してExcelファイルの保存や書き出しを効率的に行うことができます。

応用例:Excelのセル操作を効率化する

Pandasを使用すると、Excelファイルのセル操作を効率化するさまざまな方法があります。

以下では、ループを使った一括編集、条件付き書式の適用、セルへの数式の挿入、複数のExcelファイルの一括処理、セルへのコメントの追加について解説します。

ループを使って複数のセルを一括編集する

ループを使用することで、複数のセルを効率的に一括編集できます。

以下はその例です。

import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
# ループを使ってColumnAの値を一括編集
for i in range(len(df)):
    df.at[i, 'ColumnA'] = df.at[i, 'ColumnA'] * 2  # 値を2倍にする
# 編集後のDataFrameを保存
df.to_excel('edited_sample.xlsx', index=False)

このコードを実行すると、ColumnAのすべての値が2倍に編集され、edited_sample.xlsxに保存されます。

条件付き書式を適用する方法

Pandas自体には条件付き書式を直接適用する機能はありませんが、openpyxlを使用することでExcelファイルに条件付き書式を追加できます。

以下はその例です。

import pandas as pd
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
from openpyxl.formatting.rule import CellIsRule
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
df.to_excel('sample_with_format.xlsx', index=False)
# openpyxlを使って条件付き書式を適用
wb = load_workbook('sample_with_format.xlsx')
ws = wb.active
# 条件付き書式を設定
fill = PatternFill(start_color='FFFF00', end_color='FFFF00', fill_type='solid')
rule = CellIsRule(operator='greaterThan', formula=['10'], fill=fill)
ws.conditional_formatting.add('A1:A10', rule)  # A1からA10の範囲に適用
# 保存
wb.save('sample_with_format.xlsx')

このコードを実行すると、A1からA10のセルの値が10より大きい場合、背景色が黄色に設定されます。

Excelのセルに数式を挿入する方法

Excelファイルに数式を挿入するには、openpyxlを使用します。

以下はその例です。

import pandas as pd
from openpyxl import Workbook
# 新しいExcelファイルを作成
wb = Workbook()
ws = wb.active
# データを挿入
ws['A1'] = 10
ws['A2'] = 20
# セルに数式を挿入
ws['A3'] = '=A1 + A2'  # A1とA2の合計を計算
# 保存
wb.save('formula_example.xlsx')

このコードを実行すると、A3A1A2の合計が計算される数式が挿入されたExcelファイルが作成されます。

複数のExcelファイルを一括で処理する方法

複数のExcelファイルを一括で処理するには、ループを使用して各ファイルを読み込み、必要な操作を行います。

以下はその例です。

import pandas as pd
import glob
# Excelファイルのパスを取得
file_paths = glob.glob('data/*.xlsx')  # dataフォルダ内のすべてのExcelファイル
# 各ファイルを処理
for file_path in file_paths:
    df = pd.read_excel(file_path)
    df['NewColumn'] = df['ColumnA'] * 2  # 新しい列を追加
    df.to_excel(file_path, index=False)  # 上書き保存

このコードを実行すると、dataフォルダ内のすべてのExcelファイルにColumnAの2倍の値を持つNewColumnが追加されます。

Excelのセルにコメントを追加する方法

Excelファイルのセルにコメントを追加するには、openpyxlを使用します。

以下はその例です。

import pandas as pd
from openpyxl import load_workbook
# Excelファイルを読み込む
df = pd.read_excel('sample.xlsx')
df.to_excel('sample_with_comments.xlsx', index=False)
# openpyxlを使ってコメントを追加
wb = load_workbook('sample_with_comments.xlsx')
ws = wb.active
# セルにコメントを追加
ws['A1'].comment = Comment('これはコメントです', 'Author')
# 保存
wb.save('sample_with_comments.xlsx')

このコードを実行すると、A1のセルに「これはコメントです」というコメントが追加されたExcelファイルが作成されます。

これらの応用例を活用することで、Pandasとopenpyxlを使用してExcelファイルのセル操作を効率化し、さまざまなニーズに対応することができます。

まとめ

この記事では、Pandasを使用してExcelファイルの特定のセルを抽出・編集する方法や、複数のシートを含むExcelファイルの書き出し、条件付き書式の適用、セルへの数式の挿入、複数のExcelファイルの一括処理、さらにはセルへのコメントの追加など、Excel操作を効率化するためのさまざまなテクニックについて解説しました。

これらの方法を活用することで、Excelファイルのデータ管理や分析がよりスムーズに行えるようになりますので、ぜひ実際のプロジェクトに取り入れてみてください。

関連記事

Back to top button
目次へ