[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では、at
やiat
を使って特定のセルを抽出できます。
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)
抽出した値
複数のセルを抽出する方法
複数のセルを抽出する場合は、loc
やiloc
を使用します。
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ファイル内の特定のセルを簡単に編集できます。
以下では、at
やiat
を使ったセルの編集方法、複数のセルを一括で編集する方法、条件に基づいてセルを編集する方法について解説します。
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])
新しい値
複数のセルを一括で編集する方法
複数のセルを一括で編集する場合は、loc
やiloc
を使用します。
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ファイルが作成され、Sheet1
にdf1
、Sheet2
にdf2
が保存されます。
既存の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.xlsx
のSheet1
に新しいデータが追記されます。
書式やフォーマットを保持して保存する方法
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')
このコードを実行すると、A3
にA1
とA2
の合計が計算される数式が挿入された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ファイルのデータ管理や分析がよりスムーズに行えるようになりますので、ぜひ実際のプロジェクトに取り入れてみてください。