[Python] Pandas – Excelで指定したデータ抽出を抽出する方法

Pandasを使用してExcelファイルから特定のデータを抽出するには、まずpandas.read_excel()でExcelファイルを読み込みます。

次に、条件に基づいてデータを抽出するために、DataFrameのフィルタリング機能を使用します。

例えば、特定の列の値に基づいて行を抽出する場合、df[df['列名'] == '条件']のように記述します。

複数条件の場合は、論理演算子&|を使って条件を組み合わせます。

この記事でわかること
  • Pandasを使ったExcelデータの抽出方法
  • 条件に基づくデータのフィルタリング
  • データのソートや書き出しの手法
  • 欠損値や重複データの処理方法
  • データのグループ化と集計の実践方法

Pandasを活用して、データ分析の効率を向上させることが期待される

目次から探す

Excelデータの抽出方法

PythonのPandasライブラリを使用すると、Excelファイルから特定のデータを簡単に抽出できます。

以下では、さまざまな方法でデータを抽出する方法を解説します。

列を指定してデータを抽出する

特定の列を指定してデータを抽出するには、pandasread_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を使用したデータの抽出や加工がどのように行えるかを理解することができます。

これにより、データ分析の幅が広がります。

よくある質問

Excelファイルが大きすぎて読み込めない場合は?

Excelファイルが大きすぎて読み込めない場合、以下の対策を試みることができます。

  • ファイルを分割する: 大きなExcelファイルを複数の小さなファイルに分割し、それぞれを個別に読み込む。
  • 必要な列や行だけを読み込む: usecolsnrows引数を使用して、必要なデータのみを指定して読み込む。
  • データをCSV形式に変換する: ExcelファイルをCSV形式に変換し、Pandasで読み込むことで、メモリ使用量を削減できる場合があります。

特定のシートが見つからない場合は?

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

  • シート名のスペルを確認する: シート名が正確であるか、スペルミスがないかを確認します。
  • シートの存在を確認する: pd.ExcelFileを使用して、Excelファイル内のシート名をリスト表示し、目的のシートが存在するか確認します。
  import pandas as pd
  xls = pd.ExcelFile('data.xlsx')
  print(xls.sheet_names)
  • シートのインデックスを使用する: シート名が不明な場合、シートのインデックス(0から始まる番号)を使用して読み込むこともできます。

抽出したデータが正しく保存されない場合は?

抽出したデータが正しく保存されない場合、以下の点を確認してください。

  • ファイルパスを確認する: 保存先のファイルパスが正しいか、書き込み権限があるかを確認します。
  • index引数の設定: to_excelメソッドのindex引数がFalseに設定されているか確認し、必要に応じて変更します。
  • エンジンの指定: Excelファイルの形式に応じて、engine引数を指定することが必要な場合があります。

特に、.xlsxファイルの場合はopenpyxlを指定します。

  filtered_data.to_excel('output.xlsx', index=False, engine='openpyxl')

これらの確認を行うことで、データの保存に関する問題を解決できる可能性があります。

まとめ

この記事では、PythonのPandasライブラリを使用してExcelデータを抽出、フィルタリング、ソート、書き出し、そしてさまざまな応用例について詳しく解説しました。

これにより、データ分析や処理の効率を向上させるための具体的な手法を学ぶことができました。

今後は、実際のデータを使ってこれらのテクニックを試し、さらにスキルを磨いていくことをお勧めします。

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