[Python] Excelファイルから行指定で値を取得する方法
PythonでExcelファイルから特定の行の値を取得するには、一般的にライブラリを使用します。
pandas
のread_excel
関数を用いてExcelファイルをデータフレームとして読み込みます。
その後、データフレームのiloc
やloc
メソッドを使用して、特定の行を指定して値を取得します。
これにより、Excelファイル内のデータを効率的に操作し、必要な情報を抽出することが可能です。
openpyxlを使った行指定での値取得
PythonでExcelファイルを操作する際に便利なライブラリの一つがopenpyxl
です。
このセクションでは、openpyxl
を使ってExcelファイルから特定の行のデータを取得する方法について解説します。
openpyxlのインストールと基本設定
インストール方法
まず、openpyxl
を使用するためには、ライブラリをインストールする必要があります。
以下のコマンドを使用してインストールを行います。
pip install openpyxl
ワークブックとワークシートの取得
Excelファイルを操作するためには、まずワークブックとワークシートを取得する必要があります。
以下のサンプルコードでは、Excelファイルを開き、特定のシートを取得する方法を示します。
import openpyxl
# Excelファイルを開く
workbook = openpyxl.load_workbook('sample.xlsx')
# シートを取得
worksheet = workbook['Sheet1']
このコードでは、sample.xlsx
というファイルを開き、Sheet1
という名前のシートを取得しています。
行指定でのデータ取得方法
行番号を指定してデータを取得する
特定の行のデータを取得するには、行番号を指定します。
以下のコードは、2行目のデータを取得する例です。
# 2行目のデータを取得
row_data = [cell.value for cell in worksheet[2]]
print(row_data)
['データ1', 'データ2', 'データ3']
このコードは、2行目のすべてのセルの値をリストとして取得し、表示します。
特定の列のデータを取得する
特定の列のデータを取得する場合は、列番号を指定します。
以下のコードは、A列のデータを取得する例です。
# A列のデータを取得
column_data = [cell.value for cell in worksheet['A']]
print(column_data)
['ヘッダー1', 'データ1', 'データ2']
このコードは、A列のすべてのセルの値をリストとして取得し、表示します。
取得したデータの操作
データの表示
取得したデータは、Pythonのリストとして扱うことができます。
以下のコードは、取得したデータを整形して表示する例です。
# 取得したデータを整形して表示
for index, value in enumerate(row_data):
print(f"列{index + 1}: {value}")
列1: データ1
列2: データ2
列3: データ3
このコードは、行データを列ごとに表示します。
データの加工
取得したデータを加工することも可能です。
以下のコードは、データを加工して新しいリストを作成する例です。
# データを加工して新しいリストを作成
processed_data = [str(value).upper() for value in row_data]
print(processed_data)
['データ1', 'データ2', 'データ3']
このコードは、取得したデータをすべて大文字に変換して新しいリストを作成し、表示します。
pandasを使った行指定での値取得
pandas
は、データ解析に非常に便利なPythonライブラリで、Excelファイルの操作にも広く使われています。
このセクションでは、pandas
を使ってExcelファイルから特定の行のデータを取得する方法について解説します。
pandasのインストールと基本設定
インストール方法
まず、pandas
を使用するためには、ライブラリをインストールする必要があります。
以下のコマンドを使用してインストールを行います。
pip install pandas
DataFrameの作成
Excelファイルを操作するためには、まずDataFrame
を作成する必要があります。
以下のサンプルコードでは、Excelファイルを読み込み、DataFrame
を作成する方法を示します。
import pandas as pd
# Excelファイルを読み込んでDataFrameを作成
df = pd.read_excel('sample.xlsx', sheet_name='Sheet1')
このコードでは、sample.xlsx
というファイルを読み込み、Sheet1
という名前のシートをDataFrame
として取得しています。
行指定でのデータ取得方法
locとilocの使い方
pandas
では、loc
とiloc
を使って行を指定してデータを取得することができます。
loc
はラベルベースで行を取得します。iloc
はインデックスベースで行を取得します。
以下のコードは、2行目のデータを取得する例です。
# インデックスを使って2行目のデータを取得
row_data_iloc = df.iloc[1]
print(row_data_iloc)
# ラベルを使って2行目のデータを取得
row_data_loc = df.loc[1]
print(row_data_loc)
列1 データ1
列2 データ2
列3 データ3
Name: 1, dtype: object
このコードは、iloc
とloc
を使って2行目のデータを取得し、表示します。
条件を指定して行を取得する
特定の条件に基づいて行を取得することも可能です。
以下のコードは、特定の列の値が条件を満たす行を取得する例です。
# 条件を指定して行を取得
filtered_data = df[df['列1'] == '条件値']
print(filtered_data)
列1 列2 列3
0 条件値 データ2 データ3
このコードは、列1
の値が条件値
である行を取得し、表示します。
取得したデータの操作
データの表示
取得したデータは、DataFrame
やSeries
として扱うことができます。
以下のコードは、取得したデータを整形して表示する例です。
# 取得したデータを整形して表示
for index, value in row_data_iloc.items():
print(f"{index}: {value}")
列1: データ1
列2: データ2
列3: データ3
このコードは、行データを列ごとに表示します。
データの加工
取得したデータを加工することも可能です。
以下のコードは、データを加工して新しいDataFrame
を作成する例です。
# データを加工して新しいDataFrameを作成
processed_data = df.applymap(lambda x: str(x).upper())
print(processed_data)
列1 列2 列3
0 データ1 データ2 データ3
1 データ4 データ5 データ6
このコードは、取得したデータをすべて大文字に変換して新しいDataFrame
を作成し、表示します。
xlrdを使った行指定での値取得
xlrd
は、Excelファイルを読み込むためのPythonライブラリです。
特に、古いバージョンのExcelファイル(.xls形式)を扱う際に便利です。
このセクションでは、xlrd
を使ってExcelファイルから特定の行のデータを取得する方法について解説します。
xlrdのインストールと基本設定
インストール方法
まず、xlrd
を使用するためには、ライブラリをインストールする必要があります。
以下のコマンドを使用してインストールを行います。
pip install xlrd
ワークブックとワークシートの取得
Excelファイルを操作するためには、まずワークブックとワークシートを取得する必要があります。
以下のサンプルコードでは、Excelファイルを開き、特定のシートを取得する方法を示します。
import xlrd
# Excelファイルを開く
workbook = xlrd.open_workbook('sample.xls')
# シートを取得
worksheet = workbook.sheet_by_name('Sheet1')
このコードでは、sample.xls
というファイルを開き、Sheet1
という名前のシートを取得しています。
行指定でのデータ取得方法
行番号を指定してデータを取得する
特定の行のデータを取得するには、行番号を指定します。
以下のコードは、2行目のデータを取得する例です。
# 2行目のデータを取得
row_data = worksheet.row_values(1)
print(row_data)
['データ1', 'データ2', 'データ3']
このコードは、2行目のすべてのセルの値をリストとして取得し、表示します。
特定の列のデータを取得する
特定の列のデータを取得する場合は、列番号を指定します。
以下のコードは、A列のデータを取得する例です。
# A列のデータを取得
column_data = worksheet.col_values(0)
print(column_data)
['ヘッダー1', 'データ1', 'データ2']
このコードは、A列のすべてのセルの値をリストとして取得し、表示します。
取得したデータの操作
データの表示
取得したデータは、Pythonのリストとして扱うことができます。
以下のコードは、取得したデータを整形して表示する例です。
# 取得したデータを整形して表示
for index, value in enumerate(row_data):
print(f"列{index + 1}: {value}")
列1: データ1
列2: データ2
列3: データ3
このコードは、行データを列ごとに表示します。
データの加工
取得したデータを加工することも可能です。
以下のコードは、データを加工して新しいリストを作成する例です。
# データを加工して新しいリストを作成
processed_data = [str(value).upper() for value in row_data]
print(processed_data)
['データ1', 'データ2', 'データ3']
このコードは、取得したデータをすべて大文字に変換して新しいリストを作成し、表示します。
応用例
Excelファイルからデータを取得する基本的な方法を学んだ後は、応用的な操作を行うことができます。
このセクションでは、複数行のデータを一度に取得する方法や、条件に基づいて行をフィルタリングする方法、取得したデータをCSVファイルに保存する方法について解説します。
複数行のデータを一度に取得する方法
複数行のデータを一度に取得するには、ループを使用して行を繰り返し取得することができます。
以下のサンプルコードは、openpyxl
を使用して、特定の範囲の行を一度に取得する例です。
import openpyxl
# Excelファイルを開く
workbook = openpyxl.load_workbook('sample.xlsx')
worksheet = workbook['Sheet1']
# 2行目から4行目までのデータを取得
rows_data = []
for row in worksheet.iter_rows(min_row=2, max_row=4, values_only=True):
rows_data.append(row)
print(rows_data)
[('データ1', 'データ2', 'データ3'), ('データ4', 'データ5', 'データ6'), ('データ7', 'データ8', 'データ9')]
このコードは、2行目から4行目までのデータを取得し、リストとして表示します。
条件に基づいて行をフィルタリングする方法
条件に基づいて行をフィルタリングするには、pandas
を使用するのが便利です。
以下のサンプルコードは、特定の条件を満たす行をフィルタリングする例です。
import pandas as pd
# Excelファイルを読み込んでDataFrameを作成
df = pd.read_excel('sample.xlsx', sheet_name='Sheet1')
# 条件に基づいて行をフィルタリング
filtered_data = df[df['列1'] == '条件値']
print(filtered_data)
列1 列2 列3
0 条件値 データ2 データ3
このコードは、列1
の値が条件値
である行をフィルタリングし、表示します。
取得したデータをCSVファイルに保存する方法
取得したデータをCSVファイルに保存することも可能です。
以下のサンプルコードは、pandas
を使用して、DataFrame
をCSVファイルに保存する例です。
# フィルタリングしたデータをCSVファイルに保存
filtered_data.to_csv('filtered_data.csv', index=False)
このコードは、フィルタリングしたデータをfiltered_data.csv
という名前のCSVファイルに保存します。
index=False
は、行番号をCSVファイルに含めないようにするオプションです。
これにより、データを他のアプリケーションで簡単に利用できる形式で保存できます。
まとめ
この記事では、Pythonを使用してExcelファイルから行指定でデータを取得する方法について、openpyxl
、pandas
、xlrd
の3つのライブラリを用いて解説しました。
各ライブラリの特徴や使い方を理解することで、Excelデータの操作がより効率的に行えるようになります。
これを機に、実際のデータ操作に挑戦し、Pythonを活用したデータ処理のスキルをさらに向上させてください。