[Python] Pandas – Excelで指定したデータ抽出を抽出する方法
Pandasを使用してExcelファイルから特定のデータを抽出するには、まずpandas.read_excel()
でExcelファイルを読み込みます。
次に、条件に基づいてデータを抽出するために、DataFrameのフィルタリング機能を使用します。
例えば、特定の列の値に基づいて行を抽出する場合、df[df['列名'] == '条件']
のように記述します。
複数条件の場合は、論理演算子&
や|
を使って条件を組み合わせます。
- Pandasを使ったExcelデータの抽出方法
- 条件に基づくデータのフィルタリング
- データのソートや書き出しの手法
- 欠損値や重複データの処理方法
- データのグループ化と集計の実践方法
Pandasを活用して、データ分析の効率を向上させることが期待される
Excelデータの抽出方法
PythonのPandasライブラリを使用すると、Excelファイルから特定のデータを簡単に抽出できます。
以下では、さまざまな方法でデータを抽出する方法を解説します。
列を指定してデータを抽出する
特定の列を指定してデータを抽出するには、pandas
のread_excel関数
を使用してExcelファイルを読み込み、列名を指定してデータを取得します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 特定の列を抽出する
extracted_columns = df[['列名1', '列名2']]
print(extracted_columns)
列名1 列名2
0 データ1 データ2
1 データ3 データ4
行を指定してデータを抽出する
行を指定してデータを抽出するには、ilocメソッド
を使用します。
行番号を指定することで、特定の行を取得できます。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 特定の行を抽出する
extracted_rows = df.iloc[0:5] # 0行目から4行目まで
print(extracted_rows)
列名1 列名2
0 データ1 データ2
1 データ3 データ4
2 データ5 データ6
3 データ7 データ8
4 データ9 データ10
条件に基づいてデータを抽出する
条件に基づいてデータを抽出するには、ブールインデクシングを使用します。
特定の条件を満たす行をフィルタリングできます。
単一条件での抽出
例えば、特定の列の値が特定の値に等しい行を抽出する場合は、以下のようにします。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 単一条件でデータを抽出する
extracted_single_condition = df[df['列名1'] == '特定の値']
print(extracted_single_condition)
列名1 列名2
0 特定の値 データ2
1 特定の値 データ4
複数条件での抽出
複数の条件を組み合わせてデータを抽出することも可能です。
&
(AND)や|
(OR)を使用して条件を結合します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 複数条件でデータを抽出する
extracted_multiple_conditions = df[(df['列名1'] == '特定の値') & (df['列名2'] > 10)]
print(extracted_multiple_conditions)
列名1 列名2
0 特定の値 15
1 特定の値 20
特定の範囲を抽出する
特定の範囲を抽出するには、locメソッド
を使用して行と列を指定します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 特定の範囲を抽出する
extracted_range = df.loc[0:5, ['列名1', '列名2']]
print(extracted_range)
列名1 列名2
0 データ1 データ2
1 データ3 データ4
2 データ5 データ6
3 データ7 データ8
4 データ9 データ10
5 データ11 データ12
特定のシートからデータを抽出する
Excelファイルには複数のシートが含まれている場合があります。
特定のシートからデータを抽出するには、sheet_name
引数を使用します。
import pandas as pd
# 特定のシートを読み込む
df = pd.read_excel('data.xlsx', sheet_name='シート名')
# データを表示する
print(df)
列名1 列名2
0 データ1 データ2
1 データ3 データ4
これらの方法を使用することで、Excelファイルから必要なデータを効率的に抽出することができます。
複数条件でのデータ抽出
Pandasを使用すると、複数の条件に基づいてデータを抽出することができます。
これにより、より具体的なデータフィルタリングが可能になります。
以下では、論理演算子を使った条件指定や、複数列に基づくデータ抽出、部分一致でのデータ抽出について解説します。
論理演算子を使った条件指定
Pandasでは、&
(AND)や|
(OR)を使用して複数の条件を組み合わせることができます。
AND条件での抽出
AND条件を使用して、複数の条件を満たす行を抽出する方法は以下の通りです。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# AND条件でデータを抽出する
extracted_and_condition = df[(df['列名1'] == '特定の値') & (df['列名2'] > 10)]
print(extracted_and_condition)
列名1 列名2
0 特定の値 15
1 特定の値 20
この例では、列名1
が「特定の値」であり、かつ列名2
が10より大きい行を抽出しています。
OR条件での抽出
OR条件を使用して、いずれかの条件を満たす行を抽出する方法は以下の通りです。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# OR条件でデータを抽出する
extracted_or_condition = df[(df['列名1'] == '特定の値') | (df['列名2'] < 5)]
print(extracted_or_condition)
列名1 列名2
0 特定の値 2
1 特定の値 3
この例では、列名1
が「特定の値」であるか、列名2
が5未満である行を抽出しています。
複数列に基づくデータ抽出
複数の列に基づいてデータを抽出する場合、各列に対して条件を指定し、ANDまたはORで結合します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 複数列に基づくデータを抽出する
extracted_multiple_columns = df[(df['列名1'] == '特定の値') & (df['列名2'] > 10) & (df['列名3'] == '条件')]
print(extracted_multiple_columns)
列名1 列名2 列名3
0 特定の値 15 条件
1 特定の値 20 条件
この例では、列名1
が「特定の値」で、列名2
が10より大きく、列名3
が「条件」である行を抽出しています。
部分一致でのデータ抽出
部分一致でデータを抽出するには、str.containsメソッド
を使用します。
これにより、特定の文字列を含む行をフィルタリングできます。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 部分一致でデータを抽出する
extracted_partial_match = df[df['列名1'].str.contains('特定の文字列')]
print(extracted_partial_match)
列名1 列名2
0 特定の文字列を含むデータ データ2
1 特定の文字列を含むデータ データ4
この例では、列名1
に「特定の文字列」を含む行を抽出しています。
部分一致を使用することで、より柔軟なデータ抽出が可能になります。
Excelデータのフィルタリングとソート
Pandasを使用すると、Excelデータのフィルタリングやソートが簡単に行えます。
これにより、必要なデータを迅速に抽出し、整理することができます。
以下では、特定の値や数値範囲、日付範囲でのフィルタリング方法と、データのソート方法について解説します。
特定の値でフィルタリングする
特定の値に基づいてデータをフィルタリングするには、ブールインデクシングを使用します。
以下の例では、列名1
が「特定の値」である行を抽出します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 特定の値でフィルタリングする
filtered_data = df[df['列名1'] == '特定の値']
print(filtered_data)
列名1 列名2
0 特定の値 データ2
1 特定の値 データ4
数値範囲でフィルタリングする
数値範囲でデータをフィルタリングするには、比較演算子を使用します。
以下の例では、列名2
が10以上かつ20以下の行を抽出します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 数値範囲でフィルタリングする
filtered_numeric_range = df[(df['列名2'] >= 10) & (df['列名2'] <= 20)]
print(filtered_numeric_range)
列名1 列名2
0 データ1 15
1 データ3 20
日付範囲でフィルタリングする
日付範囲でデータをフィルタリングするには、pd.to_datetime
を使用して日付を変換し、比較演算子を使用します。
以下の例では、特定の期間内の日付を持つ行を抽出します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 日付をdatetime型に変換
df['日付列'] = pd.to_datetime(df['日付列'])
# 日付範囲でフィルタリングする
start_date = '2023-01-01'
end_date = '2023-12-31'
filtered_date_range = df[(df['日付列'] >= start_date) & (df['日付列'] <= end_date)]
print(filtered_date_range)
列名1 列名2 日付列
0 データ1 15 2023-06-15
1 データ2 20 2023-11-20
データのソート方法
Pandasでは、sort_valuesメソッド
を使用してデータをソートできます。
これにより、特定の列に基づいてデータを昇順または降順に並べ替えることができます。
昇順・降順でのソート
昇順でデータをソートする場合は、ascending=True
を指定します。
降順でソートする場合は、ascending=False
を指定します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 昇順でソートする
sorted_ascending = df.sort_values(by='列名2', ascending=True)
print(sorted_ascending)
# 降順でソートする
sorted_descending = df.sort_values(by='列名2', ascending=False)
print(sorted_descending)
出力結果(昇順):
列名1 列名2
0 データ1 5
1 データ2 10
2 データ3 15
出力結果(降順):
列名1 列名2
2 データ3 15
1 データ2 10
0 データ1 5
複数列でのソート
複数の列に基づいてデータをソートすることも可能です。
by
引数にリストを指定することで、優先順位を設定できます。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 複数列でソートする
sorted_multiple_columns = df.sort_values(by=['列名1', '列名2'], ascending=[True, False])
print(sorted_multiple_columns)
列名1 列名2
0 データ1 15
1 データ1 10
2 データ2 20
3 データ3 5
この例では、列名1
を昇順で、列名2
を降順でソートしています。
これにより、データをより整理された形で表示することができます。
Excelデータの書き出し
Pandasを使用すると、抽出したデータをExcelファイルに書き出すことができます。
新しいファイルに保存したり、既存のファイルに追記したり、複数のシートにデータを書き出すことが可能です。
以下では、それぞれの方法について解説します。
抽出したデータを新しいExcelファイルに保存する
抽出したデータを新しいExcelファイルに保存するには、to_excelメソッド
を使用します。
以下の例では、抽出したデータを新しいファイル output.xlsx
に保存します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 特定の条件でデータを抽出する
filtered_data = df[df['列名1'] == '特定の値']
# 抽出したデータを新しいExcelファイルに保存する
filtered_data.to_excel('output.xlsx', index=False)
このコードを実行すると、output.xlsx
という新しいファイルが作成され、抽出したデータが保存されます。
抽出したデータを既存のExcelファイルに追記する
既存のExcelファイルにデータを追記するには、mode='a'
(追記モード)を指定し、to_excelメソッド
を使用します。
以下の例では、既存のファイル existing_file.xlsx
にデータを追記します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 特定の条件でデータを抽出する
filtered_data = df[df['列名1'] == '特定の値']
# 抽出したデータを既存のExcelファイルに追記する
with pd.ExcelWriter('existing_file.xlsx', mode='a', engine='openpyxl') as writer:
filtered_data.to_excel(writer, sheet_name='新しいシート名', index=False)
このコードを実行すると、existing_file.xlsx
に新しいシートが追加され、抽出したデータが保存されます。
複数シートにデータを書き出す
複数のシートにデータを書き出す場合も、ExcelWriter
を使用します。
以下の例では、異なるデータフレームを異なるシートに書き出します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# データを抽出する
filtered_data1 = df[df['列名1'] == '特定の値']
filtered_data2 = df[df['列名2'] > 10]
# 複数シートにデータを書き出す
with pd.ExcelWriter('multiple_sheets.xlsx') as writer:
filtered_data1.to_excel(writer, sheet_name='シート1', index=False)
filtered_data2.to_excel(writer, sheet_name='シート2', index=False)
このコードを実行すると、multiple_sheets.xlsx
という新しいファイルが作成され、シート1
にはfiltered_data1
が、シート2
にはfiltered_data2
が保存されます。
これらの方法を使用することで、Pandasを利用してExcelデータの書き出しを簡単に行うことができます。
応用例
Pandasを使用すると、データの抽出や加工に関してさまざまな応用が可能です。
以下では、特定の列を削除したり、重複データを除外したり、欠損値を含むデータの抽出、データ型の変換、グループ化して集計したデータの抽出について解説します。
特定の列を削除してデータを抽出する
特定の列を削除してデータを抽出するには、dropメソッド
を使用します。
以下の例では、列名1
を削除してデータを抽出します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 特定の列を削除してデータを抽出する
filtered_data = df.drop(columns=['列名1'])
print(filtered_data)
列名2 列名3
0 データ2 データA
1 データ4 データB
重複データを除外して抽出する
重複データを除外するには、drop_duplicatesメソッド
を使用します。
以下の例では、重複行を削除してデータを抽出します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 重複データを除外して抽出する
unique_data = df.drop_duplicates()
print(unique_data)
列名1 列名2
0 データ1 データ2
1 データ3 データ4
欠損値を含むデータの抽出
欠損値を含むデータを抽出するには、isnullメソッド
を使用します。
以下の例では、欠損値を含む行を抽出します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# 欠損値を含むデータを抽出する
missing_data = df[df.isnull().any(axis=1)]
print(missing_data)
列名1 列名2
0 データ1 NaN
1 NaN データ4
データ型を変換して抽出する
データ型を変換するには、astypeメソッド
を使用します。
以下の例では、列名2
を整数型に変換してからデータを抽出します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# データ型を変換して抽出する
df['列名2'] = df['列名2'].astype(int)
print(df.dtypes)
列名1 object
列名2 int64
dtype: object
グループ化して集計したデータを抽出する
データをグループ化して集計するには、groupbyメソッド
を使用します。
以下の例では、列名1
でグループ化し、列名2
の合計を計算します。
import pandas as pd
# Excelファイルを読み込む
df = pd.read_excel('data.xlsx')
# グループ化して集計したデータを抽出する
grouped_data = df.groupby('列名1')['列名2'].sum().reset_index()
print(grouped_data)
列名1 列名2
0 データ1 30
1 データ2 45
これらの応用例を通じて、Pandasを使用したデータの抽出や加工がどのように行えるかを理解することができます。
これにより、データ分析の幅が広がります。
よくある質問
まとめ
この記事では、PythonのPandasライブラリを使用してExcelデータを抽出、フィルタリング、ソート、書き出し、そしてさまざまな応用例について詳しく解説しました。
これにより、データ分析や処理の効率を向上させるための具体的な手法を学ぶことができました。
今後は、実際のデータを使ってこれらのテクニックを試し、さらにスキルを磨いていくことをお勧めします。