[Python] エクセルファイルを読み込んでデータを処理する方法【Pandas/Numpy/openpyxl】

Pythonでエクセルファイルを読み込んでデータを処理するには、主にPandasライブラリを使用します。

Pandasのread_excel関数を使うことで、エクセルファイルをDataFrame形式で読み込むことができます。

openpyxlは、Pandasがエクセルファイルを操作する際に内部で使用されるライブラリで、特に.xlsx形式のファイルを扱う際に必要です。

Numpyは数値計算やデータの効率的な操作に役立ち、Pandasと組み合わせてデータ処理を行います。

この記事でわかること
  • Pandasを使ったエクセルファイルの操作方法
  • openpyxlによるエクセルファイルの編集
  • Numpyを活用したデータ処理の効率化
  • データ分析におけるエクセルの応用例
  • エクセルファイルへのデータ書き込み手法

目次から探す

Pandasを使ったエクセルファイルの読み込み方法

Pandasのインストール方法

PandasはPythonのデータ分析ライブラリで、エクセルファイルの読み込みやデータ処理に非常に便利です。

以下のコマンドを使用して、Pandasをインストールできます。

pip install pandas

read_excel関数の基本的な使い方

read_excel関数を使用すると、エクセルファイルを簡単に読み込むことができます。

基本的な使い方は以下の通りです。

import pandas as pd
# エクセルファイルを読み込む
data = pd.read_excel('ファイル名.xlsx')
# 読み込んだデータを表示
print(data)
列1  列2  列3
0  データ1  データ2  データ3
1  データ4  データ5  データ6

シート名を指定して読み込む方法

特定のシートを指定して読み込むことも可能です。

sheet_name引数を使用します。

import pandas as pd
# 特定のシートを指定して読み込む
data = pd.read_excel('ファイル名.xlsx', sheet_name='シート名')
# 読み込んだデータを表示
print(data)
   列1      列2     列3
0  データ1  データ2  データ3
1  データ4  データ5  データ6

特定の列や行を読み込む方法

特定の列や行を選択して読み込むこともできます。

usecols引数を使って列を指定し、skiprows引数で行をスキップします。

import pandas as pd
# 特定の列を指定して読み込む
data = pd.read_excel('ファイル名.xlsx', usecols='A,C', skiprows=1)
# 読み込んだデータを表示
print(data)
   列1      列3
0  データ1  データ3
1  データ4  データ6

複数のシートを一度に読み込む方法

複数のシートを一度に読み込むには、sheet_name引数にリストを渡します。

import pandas as pd
# 複数のシートを一度に読み込む
data = pd.read_excel('ファイル名.xlsx', sheet_name=['シート1', 'シート2'])
# 読み込んだデータを表示
print(data['シート1'])
print(data['シート2'])
シート1のデータ:
   列1  列2
0  データ1  データ2
シート2のデータ:
   列1  列2
0  データ3  データ4

読み込んだデータの基本的な操作

読み込んだデータに対して、基本的な操作を行うことができます。

例えば、データの先頭を表示したり、統計情報を取得したりできます。

import pandas as pd
# エクセルファイルを読み込む
data = pd.read_excel('ファイル名.xlsx')
# データの先頭5行を表示
print(data.head())
# 統計情報を表示
print(data.describe())
先頭5行:
   列1  列2  列3
0  データ1  データ2  データ3
1  データ4  データ5  データ6
2  データ7  データ8  データ9
3  データ10 データ11 データ12
4  データ13 データ14 データ15
統計情報:
          列1  列2  列3
count      15  15  15
unique     15  15  15
top     データ1 データ2 データ3
freq        1   1   1

これらの方法を使うことで、Pandasを利用してエクセルファイルからデータを効率的に読み込み、操作することができます。

openpyxlを使ったエクセルファイルの操作

openpyxlのインストール方法

openpyxlはPythonでエクセルファイルを操作するためのライブラリです。

以下のコマンドを使用して、openpyxlをインストールできます。

pip install openpyxl

openpyxlを使ってエクセルファイルを開く方法

openpyxlを使用してエクセルファイルを開くには、load_workbook関数を使用します。

以下のコードでエクセルファイルを開くことができます。

from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('ファイル名.xlsx')
# シート名を表示
print(workbook.sheetnames)
['シート1', 'シート2']

セルの値を取得・変更する方法

特定のセルの値を取得したり、変更したりすることができます。

以下のコードでは、セルの値を取得し、変更する方法を示します。

from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('ファイル名.xlsx')
sheet = workbook.active  # アクティブなシートを取得
# セルの値を取得
cell_value = sheet['A1'].value
print(f'A1の値: {cell_value}')
# セルの値を変更
sheet['A1'] = '新しい値'
# 変更後の値を表示
print(f'変更後のA1の値: {sheet["A1"].value}')
A1の値: データ1
変更後のA1の値: 新しい値

新しいシートを追加する方法

新しいシートをエクセルファイルに追加するには、create_sheetメソッドを使用します。

以下のコードで新しいシートを追加できます。

from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('ファイル名.xlsx')
# 新しいシートを追加
new_sheet = workbook.create_sheet(title='新しいシート')
# 新しいシートにデータを追加
new_sheet['A1'] = '新しいデータ'
# シート名を表示
print(workbook.sheetnames)
['シート1', 'シート2', '新しいシート']

エクセルファイルを保存する方法

変更を加えたエクセルファイルを保存するには、saveメソッドを使用します。

以下のコードでファイルを保存できます。

from openpyxl import load_workbook
# エクセルファイルを開く
workbook = load_workbook('ファイル名.xlsx')
sheet = workbook.active
# セルの値を変更
sheet['A1'] = '新しい値'
# エクセルファイルを保存
workbook.save('ファイル名.xlsx')

openpyxlとPandasの併用方法

openpyxlとPandasを併用することで、エクセルファイルの読み込みや書き込みをより効率的に行うことができます。

以下のコードでは、openpyxlでエクセルファイルを開き、Pandasでデータを操作する方法を示します。

import pandas as pd
from openpyxl import load_workbook
# openpyxlでエクセルファイルを開く
workbook = load_workbook('ファイル名.xlsx')
sheet = workbook.active
# Pandasでデータを読み込む
data = pd.read_excel('ファイル名.xlsx')
# データの先頭を表示
print(data.head())
# 新しいデータを追加
data['新しい列'] = ['値1', '値2', '値3']
# Pandasでエクセルファイルに書き込む
data.to_excel('ファイル名.xlsx', index=False)

このように、openpyxlとPandasを組み合わせることで、エクセルファイルの操作がより柔軟に行えます。

Numpyを使ったデータ処理の効率化

Numpyのインストール方法

NumpyはPythonの数値計算ライブラリで、効率的なデータ処理を可能にします。

以下のコマンドを使用して、Numpyをインストールできます。

pip install numpy

PandasのDataFrameをNumpy配列に変換する方法

PandasのDataFrameをNumpy配列に変換するには、to_numpyメソッドを使用します。

以下のコードでその方法を示します。

import pandas as pd
import numpy as np
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '列1': [1, 2, 3],
    '列2': [4, 5, 6]
})
# DataFrameをNumpy配列に変換
numpy_array = data.to_numpy()
# Numpy配列を表示
print(numpy_array)
[[1 4]
 [2 5]
 [3 6]]

Numpyを使った数値データの高速処理

Numpyはベクトル化された演算を提供し、数値データの処理を高速化します。

以下のコードでは、Numpyを使って配列の要素を2倍にする例を示します。

import numpy as np
# Numpy配列を作成
array = np.array([1, 2, 3, 4, 5])
# 配列の要素を2倍にする
doubled_array = array * 2
# 結果を表示
print(doubled_array)
[ 2  4  6  8 10]

Numpyでの統計処理とデータ分析

Numpyは統計処理にも便利です。

平均値や標準偏差を計算する方法を以下に示します。

import numpy as np
# サンプルデータを作成
data = np.array([1, 2, 3, 4, 5])
# 平均値を計算
mean_value = np.mean(data)
# 標準偏差を計算
std_deviation = np.std(data)
# 結果を表示
print(f'平均値: {mean_value}, 標準偏差: {std_deviation}')
平均値: 3.0, 標準偏差: 1.4142135623730951

NumpyとPandasの連携によるデータ処理の効率化

NumpyとPandasを組み合わせることで、データ処理の効率がさらに向上します。

以下のコードでは、PandasのDataFrameをNumpy配列に変換し、Numpyで処理した結果を再びDataFrameに戻す方法を示します。

import pandas as pd
import numpy as np
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '列1': [1, 2, 3],
    '列2': [4, 5, 6]
})
# DataFrameをNumpy配列に変換
numpy_array = data.to_numpy()
# Numpy配列の各要素を2倍にする
doubled_array = numpy_array * 2
# Numpy配列をDataFrameに戻す
new_data = pd.DataFrame(doubled_array, columns=['列1', '列2'])
# 結果を表示
print(new_data)
   列1  列2
0   2   8
1   4  10
2   6  12

このように、Numpyを使用することで、データ処理の効率化が図れます。

Pandasとの連携により、さらに強力なデータ分析が可能になります。

エクセルファイルのデータを加工・変換する方法

データのフィルタリングと条件抽出

Pandasを使用してデータをフィルタリングし、特定の条件に合致するデータを抽出することができます。

以下のコードでは、特定の列の値が条件を満たす行を抽出する方法を示します。

import pandas as pd
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '名前': ['田中', '鈴木', '佐藤', '高橋'],
    '年齢': [25, 30, 22, 35]
})
# 年齢が30以上のデータを抽出
filtered_data = data[data['年齢'] >= 30]
# 結果を表示
print(filtered_data)
   名前  年齢
1  鈴木  30
3  高橋  35

データの集計とグループ化

データを集計し、特定の列でグループ化することも可能です。

以下のコードでは、グループ化して年齢の平均を計算します。

import pandas as pd
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '名前': ['田中', '鈴木', '佐藤', '高橋', '田中'],
    '年齢': [25, 30, 22, 35, 28]
})
# 名前でグループ化し、年齢の平均を計算
grouped_data = data.groupby('名前')['年齢'].mean().reset_index()
# 結果を表示
print(grouped_data)
   名前   年齢
0  佐藤  22.0
1  鈴木  30.0
2  高橋  35.0
3  田中  26.5

列や行の追加・削除

DataFrameに列や行を追加したり、削除したりすることができます。

以下のコードでは、新しい列を追加し、特定の行を削除する方法を示します。

import pandas as pd
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [25, 30, 22]
})
# 新しい列を追加
data['性別'] = ['男', '男', '女']
# 2行目を削除
data = data.drop(index=1)
# 結果を表示
print(data)
   名前  年齢 性別
0  田中  25  男
2  佐藤  22  女

データの型変換と欠損値処理

データの型を変換したり、欠損値を処理することも重要です。

以下のコードでは、型変換と欠損値の処理を示します。

import pandas as pd
import numpy as np
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': ['25', '30', np.nan]
})
# 年齢を整数型に変換
data['年齢'] = data['年齢'].astype(float)
# 欠損値を平均値で埋める
data['年齢'].fillna(data['年齢'].mean(), inplace=True)
# 結果を表示
print(data)
   名前   年齢
0  田中  25.0
1  鈴木  30.0
2  佐藤  27.5

データのソートと並び替え

データを特定の列に基づいてソートすることができます。

以下のコードでは、年齢でデータを昇順にソートします。

import pandas as pd
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [25, 30, 22]
})
# 年齢で昇順にソート
sorted_data = data.sort_values(by='年齢')
# 結果を表示
print(sorted_data)
   名前  年齢
2  佐藤  22
0  田中  25
1  鈴木  30

データの結合とマージ

複数のDataFrameを結合したり、マージしたりすることができます。

以下のコードでは、2つのDataFrameをマージする方法を示します。

import pandas as pd
# サンプルのDataFrameを作成
data1 = pd.DataFrame({
    '名前': ['田中', '鈴木'],
    '年齢': [25, 30]
})
data2 = pd.DataFrame({
    '名前': ['佐藤', '高橋'],
    '年齢': [22, 35]
})
# 2つのDataFrameを結合
merged_data = pd.concat([data1, data2], ignore_index=True)
# 結果を表示
print(merged_data)
   名前  年齢
0  田中  25
1  鈴木  30
2  佐藤  22
3  高橋  35

このように、Pandasを使用することで、エクセルファイルのデータを効率的に加工・変換することができます。

エクセルファイルへのデータの書き込み方法

to_excel関数の基本的な使い方

Pandasのto_excel関数を使用すると、DataFrameのデータをエクセルファイルに書き込むことができます。

以下のコードでは、基本的な使い方を示します。

import pandas as pd
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [25, 30, 22]
})
# DataFrameをエクセルファイルに書き込む
data.to_excel('output.xlsx', index=False)
print("データがoutput.xlsxに書き込まれました。")

複数のシートにデータを書き込む方法

複数のシートにデータを書き込むには、ExcelWriterを使用します。

以下のコードでは、2つのシートにデータを書き込む方法を示します。

import pandas as pd
# サンプルのDataFrameを作成
data1 = pd.DataFrame({
    '名前': ['田中', '鈴木'],
    '年齢': [25, 30]
})
data2 = pd.DataFrame({
    '名前': ['佐藤', '高橋'],
    '年齢': [22, 35]
})
# ExcelWriterを使用して複数のシートに書き込む
with pd.ExcelWriter('output_multiple_sheets.xlsx') as writer:
    data1.to_excel(writer, sheet_name='シート1', index=False)
    data2.to_excel(writer, sheet_name='シート2', index=False)
print("データがoutput_multiple_sheets.xlsxに書き込まれました。")

書き込み時にフォーマットを指定する方法

書き込み時にフォーマットを指定するには、openpyxlを使用してスタイルを設定します。

以下のコードでは、セルのフォーマットを指定して書き込む方法を示します。

import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [25, 30, 22]
})
# Workbookを作成
wb = Workbook()
ws = wb.active
# DataFrameのデータを書き込む
for r in dataframe_to_rows(data, index=False, header=True):
    ws.append(r)
# フォントスタイルを設定
for cell in ws["A"]:
    cell.font = Font(bold=True)
# エクセルファイルを保存
wb.save('output_formatted.xlsx')
print("データがoutput_formatted.xlsxに書き込まれました。")

既存のエクセルファイルにデータを追加する方法

既存のエクセルファイルにデータを追加するには、openpyxlを使用してファイルを開き、データを追加します。

以下のコードでは、既存のファイルに新しいデータを追加する方法を示します。

import pandas as pd
from openpyxl import load_workbook
# 既存のエクセルファイルを開く
book = load_workbook('output.xlsx')
writer = pd.ExcelWriter('output.xlsx', engine='openpyxl') 
writer.book = book
# 新しいデータを作成
new_data = pd.DataFrame({
    '名前': ['高橋', '山田'],
    '年齢': [28, 33]
})
# 新しいデータを既存のシートに追加
new_data.to_excel(writer, sheet_name='Sheet1', startrow=writer.sheets['Sheet1'].max_row, index=False, header=False)
# エクセルファイルを保存
writer.save()
print("新しいデータがoutput.xlsxに追加されました。")

エクセルファイルの保存と上書き保存

エクセルファイルを保存する際、to_excel関数を使用すると、既存のファイルを上書きすることができます。

以下のコードでは、ファイルを上書き保存する方法を示します。

import pandas as pd
# サンプルのDataFrameを作成
data = pd.DataFrame({
    '名前': ['田中', '鈴木', '佐藤'],
    '年齢': [25, 30, 22]
})
# DataFrameをエクセルファイルに上書き保存
data.to_excel('output.xlsx', index=False)
print("データがoutput.xlsxに上書き保存されました。")

このように、Pandasを使用してエクセルファイルにデータを書き込む方法は多岐にわたります。

必要に応じて、さまざまな方法を使い分けることができます。

応用例:エクセルファイルを使ったデータ分析

エクセルデータを使った基本的な統計分析

Pandasを使用してエクセルデータの基本的な統計分析を行うことができます。

以下のコードでは、エクセルファイルからデータを読み込み、基本的な統計情報を取得する方法を示します。

import pandas as pd
# エクセルファイルを読み込む
data = pd.read_excel('data.xlsx')
# 基本的な統計情報を表示
statistics = data.describe()
print(statistics)
         年齢       収入
count   100.0    100.0
mean     30.5   50000.0
std      10.0   15000.0
min      18.0   20000.0
25%      25.0   40000.0
50%      30.0   50000.0
75%      35.0   60000.0
max      60.0   80000.0

ピボットテーブルを作成する方法

Pandasを使用してピボットテーブルを作成することができます。

以下のコードでは、特定の列を基にピボットテーブルを作成する方法を示します。

import pandas as pd
# エクセルファイルを読み込む
data = pd.read_excel('data.xlsx')
# ピボットテーブルを作成
pivot_table = pd.pivot_table(data, values='収入', index='職業', aggfunc='mean')
# 結果を表示
print(pivot_table)
収入
職業
エンジニア  60000.0
教師       40000.0
医者       80000.0

グラフを作成してデータを可視化する方法

PandasとMatplotlibを使用して、データを可視化するためのグラフを作成できます。

以下のコードでは、年齢分布のヒストグラムを作成する方法を示します。

import pandas as pd
import matplotlib.pyplot as plt
# エクセルファイルを読み込む
data = pd.read_excel('data.xlsx')
# 年齢のヒストグラムを作成
plt.hist(data['年齢'], bins=10, color='blue', alpha=0.7)
plt.title('年齢分布')
plt.xlabel('年齢')
plt.ylabel('人数')
plt.show()

複数のエクセルファイルを統合して分析する方法

複数のエクセルファイルを統合して分析するには、Pandasのconcat関数を使用します。

以下のコードでは、複数のエクセルファイルを読み込み、1つのDataFrameに統合する方法を示します。

import pandas as pd
# 複数のエクセルファイルを読み込む
file1 = pd.read_excel('data1.xlsx')
file2 = pd.read_excel('data2.xlsx')
# DataFrameを統合
combined_data = pd.concat([file1, file2], ignore_index=True)
# 統合したデータの先頭を表示
print(combined_data.head())

エクセルデータを使った機械学習の前処理

エクセルデータを機械学習に使用する前に、前処理を行う必要があります。

以下のコードでは、欠損値の処理と特徴量のスケーリングを行う方法を示します。

import pandas as pd
from sklearn.preprocessing import StandardScaler
# エクセルファイルを読み込む
data = pd.read_excel('data.xlsx')
# 欠損値を平均値で埋める
data.fillna(data.mean(), inplace=True)
# 特徴量をスケーリング
scaler = StandardScaler()
scaled_features = scaler.fit_transform(data[['年齢', '収入']])
# スケーリングしたデータをDataFrameに変換
scaled_data = pd.DataFrame(scaled_features, columns=['年齢', '収入'])
# 結果を表示
print(scaled_data.head())

このように、エクセルファイルを使用したデータ分析は多岐にわたります。

PandasやMatplotlibを活用することで、データの分析や可視化が容易に行えます。

よくある質問

エクセルファイルが大きすぎて読み込めない場合はどうすればいいですか?

エクセルファイルが大きすぎて読み込めない場合、以下の方法を試してみてください。

  • データの分割: 大きなエクセルファイルを複数の小さなファイルに分割し、それぞれを個別に読み込む。
  • 必要な列や行の指定: read_excel関数のusecolsnrows引数を使用して、必要なデータのみを読み込む。
  • データのサンプリング: 大きなデータセットからランダムにサンプルを抽出して分析を行う。
  • メモリの増設: コンピュータのメモリを増設することで、より大きなデータを扱えるようにする。

読み込んだエクセルファイルの特定のシートが見つからない場合はどうすればいいですか?

特定のシートが見つからない場合、以下の手順を試してください。

  • シート名の確認: sheetnames属性を使用して、エクセルファイル内のシート名を確認する。
  • シート名のスペルチェック: シート名に誤字や余分なスペースがないか確認する。
  • シートインデックスの使用: シート名が不明な場合、インデックスを使用してシートを指定する(例: sheet_name=0で最初のシートを指定)。
  • エクセルファイルの再確認: エクセルファイルが正しいものであるか、または破損していないか確認する。

エクセルファイルの読み込み速度を改善する方法はありますか?

エクセルファイルの読み込み速度を改善するために、以下の方法を試してみてください。

  • 必要なデータのみを読み込む: usecolsnrows引数を使用して、必要な列や行だけを指定して読み込む。
  • データ型の指定: dtype引数を使用して、各列のデータ型を明示的に指定することで、読み込み速度を向上させる。
  • エクセルファイルの最適化: 不要なデータやフォーマットを削除し、エクセルファイルを軽量化する。
  • 他のフォーマットの使用: エクセルファイルの代わりにCSVファイルなど、より軽量なフォーマットを使用することで、読み込み速度を向上させる。

まとめ

この記事では、Pythonを使用してエクセルファイルを読み込み、データを処理する方法について詳しく解説しました。

Pandasやopenpyxlを活用することで、エクセルデータの分析や加工が効率的に行えることがわかりました。

これを機に、実際のデータ分析やプロジェクトにエクセルファイルを活用し、より効果的なデータ処理を実践してみてください。

  • URLをコピーしました!
目次から探す