[Python] Pandasでエクセルファイルを読み込む方法
Pandasを使用してエクセルファイルを読み込むには、pandas.read_excel()
関数を使用します。
この関数は、指定したファイルパスからエクセルファイルを読み込み、PandasのDataFrameとしてデータを返します。
基本的な使い方は、df = pd.read_excel('ファイルパス')
です。
複数のシートがある場合は、sheet_name
引数で特定のシートを指定できます。
また、header
やindex_col
などのオプションで、ヘッダー行やインデックス列を指定することも可能です。
- Pandasを使ったExcelファイルの読み込み方法
- 複数シートのデータ処理手法
- Excelファイルへのデータ書き込み方法
- データのフィルタリングと変換技術
- Excelデータの可視化手法
Pandasでエクセルファイルを扱う基本
Pandasとは
Pandasは、Pythonでデータ解析を行うための強力なライブラリです。
特に、表形式のデータを扱うのに適しており、データフレームというデータ構造を提供します。
Pandasを使用することで、データの読み込み、操作、分析が簡単に行えます。
Excelファイルの読み込みもその一環です。
Excelファイルを読み込むための準備
Excelファイルを読み込むには、まずPandasライブラリをインストールする必要があります。
以下のコマンドを使用して、Pandasをインストールできます。
pip install pandas openpyxl
openpyxl
は、Excelファイルを読み書きするためのライブラリです。
これをインストールすることで、PandasがExcelファイルを扱えるようになります。
read_excel関数の基本的な使い方
Pandasでは、read_excel関数
を使用してExcelファイルを読み込みます。
基本的な使い方は以下の通りです。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('ファイル名.xlsx')
# データフレームの内容を表示
print(df)
このコードを実行すると、指定したExcelファイルの内容がデータフレームとして読み込まれ、表示されます。
Excelファイルのパス指定方法
Excelファイルのパスは、相対パスまたは絶対パスで指定できます。
相対パスは、スクリプトが実行されているディレクトリからのパスを指します。
絶対パスは、ファイルシステムのルートからの完全なパスです。
# 相対パス
df = pd.read_excel('./data/ファイル名.xlsx')
# 絶対パス
df = pd.read_excel('C:/Users/ユーザー名/Documents/ファイル名.xlsx')
シート名の指定方法
Excelファイルには複数のシートが含まれている場合があります。
特定のシートを読み込むには、sheet_name
引数を使用します。
シート名を文字列で指定するか、シートのインデックスを整数で指定できます。
# シート名を指定して読み込む
df = pd.read_excel('ファイル名.xlsx', sheet_name='シート1')
# シートのインデックスを指定して読み込む
df = pd.read_excel('ファイル名.xlsx', sheet_name=0) # 最初のシート
読み込む範囲を指定する方法
特定の範囲のデータだけを読み込みたい場合は、usecols
引数を使用して列を指定できます。
また、skiprows
引数を使用して、読み込む際にスキップする行数を指定することも可能です。
# 特定の列を指定して読み込む
df = pd.read_excel('ファイル名.xlsx', usecols='A:C') # A列からC列まで
# 特定の行をスキップして読み込む
df = pd.read_excel('ファイル名.xlsx', skiprows=2) # 最初の2行をスキップ
これにより、必要なデータだけを効率的に読み込むことができます。
read_excel関数のオプション
特定の列だけを読み込む方法
read_excel関数
では、usecols
引数を使用して特定の列だけを読み込むことができます。
列は、列名や列番号で指定できます。
以下の例では、A列とC列を読み込んでいます。
import pandas as pd
# A列とC列を読み込む
df = pd.read_excel('ファイル名.xlsx', usecols='A,C')
# データフレームの内容を表示
print(df)
このようにすることで、必要なデータだけを効率的に取得できます。
ヘッダー行を指定する方法
デフォルトでは、read_excel関数
は最初の行をヘッダーとして扱いますが、header
引数を使用して別の行をヘッダーとして指定することができます。
以下の例では、3行目をヘッダーとして指定しています。
import pandas as pd
# 3行目をヘッダーとして読み込む
df = pd.read_excel('ファイル名.xlsx', header=2)
# データフレームの内容を表示
print(df)
これにより、データの構造に応じた柔軟な読み込みが可能になります。
インデックス列を指定する方法
データフレームのインデックスとして使用する列を指定するには、index_col
引数を使用します。
以下の例では、A列をインデックスとして指定しています。
import pandas as pd
# A列をインデックスとして読み込む
df = pd.read_excel('ファイル名.xlsx', index_col=0)
# データフレームの内容を表示
print(df)
インデックスを指定することで、データの操作がより効率的になります。
データ型を指定する方法
dtype
引数を使用して、各列のデータ型を指定することができます。
これにより、読み込む際にデータ型を明示的に設定できます。
以下の例では、A列を文字列型、B列を整数型として指定しています。
import pandas as pd
# データ型を指定して読み込む
df = pd.read_excel('ファイル名.xlsx', dtype={'A': str, 'B': int})
# データフレームの内容を表示
print(df)
データ型を適切に指定することで、後のデータ処理がスムーズになります。
空白セルの扱い方
空白セルの扱いは、na_filter
引数を使用して制御できます。
デフォルトでは、空白セルはNaNとして扱われますが、これを無効にすることも可能です。
以下の例では、空白セルを無視して読み込んでいます。
import pandas as pd
# 空白セルを無視して読み込む
df = pd.read_excel('ファイル名.xlsx', na_filter=False)
# データフレームの内容を表示
print(df)
このオプションを使用することで、空白セルの扱いを柔軟に調整できます。
日付データの自動変換を無効にする方法
Pandasは、Excelファイル内の日付データを自動的に変換しますが、これを無効にするには、convert_date
引数を使用します。
以下の例では、日付データの自動変換を無効にしています。
import pandas as pd
# 日付データの自動変換を無効にして読み込む
df = pd.read_excel('ファイル名.xlsx', convert_date=False)
# データフレームの内容を表示
print(df)
このオプションを使用することで、日付データをそのままの形式で取得できます。
複数シートの読み込み
複数シートを一度に読み込む方法
Pandasのread_excel関数
を使用して、複数のシートを一度に読み込むことができます。
sheet_name
引数にリストを指定することで、複数のシートを同時に読み込むことが可能です。
以下の例では、シート1とシート2を同時に読み込んでいます。
import pandas as pd
# 複数のシートを一度に読み込む
sheets = pd.read_excel('ファイル名.xlsx', sheet_name=['シート1', 'シート2'])
# 各シートのデータフレームを表示
for sheet_name, df in sheets.items():
print(f"{sheet_name}のデータ:")
print(df)
このようにすることで、複数のシートのデータを一度に取得できます。
シートごとに異なるデータを処理する方法
複数のシートを読み込んだ後、各シートごとに異なる処理を行うことができます。
以下の例では、シート1とシート2のデータをそれぞれ異なる方法で処理しています。
import pandas as pd
# 複数のシートを読み込む
sheets = pd.read_excel('ファイル名.xlsx', sheet_name=['シート1', 'シート2'])
# シート1のデータを処理
df1 = sheets['シート1']
df1['新しい列'] = df1['既存の列'] * 2 # 既存の列の値を2倍にする
# シート2のデータを処理
df2 = sheets['シート2']
df2 = df2.dropna() # 空白セルを含む行を削除
# 処理結果を表示
print("シート1の処理結果:")
print(df1)
print("シート2の処理結果:")
print(df2)
このように、シートごとに異なる処理を行うことで、データの特性に応じた柔軟な分析が可能になります。
複数シートを一つのDataFrameに結合する方法
複数のシートを一つのDataFrameに結合するには、concat関数
を使用します。
以下の例では、シート1とシート2のデータを縦に結合しています。
import pandas as pd
# 複数のシートを読み込む
sheets = pd.read_excel('ファイル名.xlsx', sheet_name=['シート1', 'シート2'])
# シート1とシート2を結合
combined_df = pd.concat(sheets.values(), ignore_index=True)
# 結合したデータフレームの内容を表示
print("結合したデータフレーム:")
print(combined_df)
この方法を使用することで、複数のシートのデータを一つのデータフレームにまとめて、さらに分析を行いやすくなります。
Excelファイルの書き込み
to_excel関数の基本的な使い方
Pandasでは、to_excel関数
を使用してデータフレームをExcelファイルに書き込むことができます。
基本的な使い方は以下の通りです。
import pandas as pd
# サンプルデータを作成
data = {
'列1': [1, 2, 3],
'列2': ['A', 'B', 'C']
}
df = pd.DataFrame(data)
# データフレームをExcelファイルに書き込む
df.to_excel('出力ファイル.xlsx', index=False)
print("データフレームをExcelファイルに書き込みました。")
このコードを実行すると、指定した名前のExcelファイルが作成され、データフレームの内容が書き込まれます。
index=False
を指定することで、インデックス列をファイルに書き込まないようにしています。
複数シートに書き込む方法
複数のシートにデータを書き込むには、ExcelWriter
を使用します。
以下の例では、2つの異なるデータフレームをそれぞれ異なるシートに書き込んでいます。
import pandas as pd
# サンプルデータを作成
data1 = {
'列1': [1, 2, 3],
'列2': ['A', 'B', 'C']
}
data2 = {
'列3': [4, 5, 6],
'列4': ['D', 'E', 'F']
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# ExcelWriterを使用して複数シートに書き込む
with pd.ExcelWriter('複数シート出力ファイル.xlsx') as writer:
df1.to_excel(writer, sheet_name='シート1', index=False)
df2.to_excel(writer, sheet_name='シート2', index=False)
print("複数のシートにデータを書き込みました。")
このようにすることで、異なるデータを異なるシートに整理して書き込むことができます。
書き込み時のフォーマット指定
to_excel関数
では、書き込む際にフォーマットを指定することも可能です。
xlsxwriter
ライブラリを使用することで、セルのフォーマットを設定できます。
以下の例では、特定の列のフォントを太字にしています。
import pandas as pd
# サンプルデータを作成
data = {
'列1': [1, 2, 3],
'列2': ['A', 'B', 'C']
}
df = pd.DataFrame(data)
# ExcelWriterを使用してフォーマットを指定
with pd.ExcelWriter('フォーマット付き出力ファイル.xlsx', engine='xlsxwriter') as writer:
df.to_excel(writer, sheet_name='シート1', index=False)
# ワークブックとワークシートを取得
workbook = writer.book
worksheet = writer.sheets['シート1']
# フォーマットを定義
bold_format = workbook.add_format({'bold': True})
# 列のフォーマットを適用
worksheet.set_column('A:A', None, bold_format) # A列を太字にする
print("フォーマット付きでデータを書き込みました。")
このように、書き込み時にフォーマットを指定することで、見やすいExcelファイルを作成できます。
インデックスやヘッダーの書き込みを制御する方法
to_excel関数
では、インデックスやヘッダーの書き込みを制御するための引数があります。
index
引数をFalse
に設定するとインデックスを、header
引数をFalse
に設定するとヘッダーをファイルに書き込まなくなります。
以下の例では、インデックスを省略して書き込んでいます。
import pandas as pd
# サンプルデータを作成
data = {
'列1': [1, 2, 3],
'列2': ['A', 'B', 'C']
}
df = pd.DataFrame(data)
# インデックスを省略して書き込む
df.to_excel('インデックスなし出力ファイル.xlsx', index=False, header=True)
print("インデックスを省略してデータを書き込みました。")
このように、必要に応じてインデックスやヘッダーの書き込みを制御することで、データの出力形式を柔軟に調整できます。
応用例
大規模なExcelファイルを分割して読み込む方法
大規模なExcelファイルを一度に読み込むと、メモリを大量に消費することがあります。
chunksize
引数を使用することで、指定した行数ごとにデータを分割して読み込むことができます。
以下の例では、1000行ごとにデータを分割して処理しています。
import pandas as pd
# 大規模なExcelファイルを分割して読み込む
for chunk in pd.read_excel('大規模ファイル.xlsx', chunksize=1000):
# 各チャンクの処理
print(chunk.head()) # 各チャンクの最初の5行を表示
この方法を使用することで、大規模なデータを効率的に処理できます。
Excelファイルの特定のシートだけを更新する方法
特定のシートだけを更新するには、まずそのシートを読み込み、必要な変更を加えた後、再度書き込む必要があります。
以下の例では、シート1のデータを更新しています。
import pandas as pd
# シート1を読み込む
df = pd.read_excel('ファイル名.xlsx', sheet_name='シート1')
# データを更新
df['新しい列'] = df['既存の列'] * 2 # 既存の列の値を2倍にする
# 更新したデータを同じシートに書き込む
with pd.ExcelWriter('ファイル名.xlsx', mode='a', if_sheet_exists='replace') as writer:
df.to_excel(writer, sheet_name='シート1', index=False)
print("シート1のデータを更新しました。")
このように、特定のシートだけを効率的に更新できます。
Excelファイルのデータをフィルタリングして読み込む方法
特定の条件に基づいてデータをフィルタリングして読み込むには、queryメソッド
を使用します。
以下の例では、特定の列の値が条件を満たす行だけを読み込んでいます。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('ファイル名.xlsx')
# 特定の条件でフィルタリング
filtered_df = df.query('列1 > 10') # 列1の値が10より大きい行を取得
# フィルタリングしたデータを表示
print(filtered_df)
この方法を使用することで、必要なデータだけを効率的に取得できます。
Excelファイルのデータを他の形式に変換する方法
Pandasを使用すると、Excelファイルのデータを他の形式(CSVやJSONなど)に簡単に変換できます。
以下の例では、ExcelファイルをCSV形式に変換しています。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('ファイル名.xlsx')
# CSV形式で書き出す
df.to_csv('出力ファイル.csv', index=False)
print("ExcelファイルをCSV形式に変換しました。")
このように、データを他の形式に変換することで、さまざまな用途に利用できます。
Excelファイルのデータを可視化する方法
PandasとMatplotlibを組み合わせることで、Excelファイルのデータを可視化することができます。
以下の例では、Excelファイルのデータを読み込み、簡単なグラフを作成しています。
import pandas as pd
import matplotlib.pyplot as plt
# Excelファイルを読み込む
df = pd.read_excel('ファイル名.xlsx')
# データを可視化
plt.figure(figsize=(10, 6))
plt.plot(df['列1'], df['列2'], marker='o')
plt.title('列1と列2の関係')
plt.xlabel('列1')
plt.ylabel('列2')
plt.grid()
plt.show()
このように、データを可視化することで、トレンドやパターンを把握しやすくなります。
よくある質問
まとめ
この記事では、Pandasを使用してExcelファイルを読み込む方法や、データの書き込み、複数シートの操作、さらにはデータの可視化や変換について詳しく解説しました。
これにより、Excelファイルを効率的に扱うための基本的なスキルを身につけることができるでしょう。
今後は、実際のデータ分析やプロジェクトにおいて、これらのテクニックを活用して、より効果的なデータ処理を行ってみてください。