【Pandas】クリップボードからDataFrameを作る

Pandas
この記事は約7分で読めます。

こんにちは、JS2IIUです。

Pandasには、クリップボードから直接データを読み込み、DataFrameに変換する機能が備わっています。この機能を使えば、エクセルやウェブページからコピーしたデータを簡単にDataFrameとして取得でき、データ分析の効率が向上します。本記事では、クリップボードのデータをDataFrameに変換する方法を、データクレンジング(データの整形)も含めて詳しく解説します。

クリップボードからのデータ読み込みとは?

クリップボードは、一時的にコピーされたテキストやデータが保存される領域です。Pandasのread_clipboard()関数を使うと、クリップボードにある表形式のデータをDataFrameに変換できます。この機能は、エクセルで作成したデータをPandasに取り込みたい時や、ウェブページの表データをそのまま利用したい場合に便利です。以下のようなデータ形式が対応可能です:

  • エクセルのセル範囲:複数のセルを選択してコピーし、Pandasで直接読み込み
  • ウェブページ上のテーブル:ブラウザ上でコピーしたテーブルデータをそのままDataFrameとして取り込み
  • タブやカンマ区切りのテキスト:テキストデータが区切られた形式であれば自動的に判別

基本サンプルコード:クリップボードからDataFrameを作成

まず、クリップボードのデータをDataFrameに変換する基本的なサンプルコードを見ていきましょう。この例では、エクセルからコピーしたデータがクリップボードにあると仮定します。

import pandas as pd

# クリップボードの内容をDataFrameに読み込む
df = pd.read_clipboard()

# DataFrameの内容を表示
print(df)

出力は次のようになります。

      名前  年齢      国籍
0  Alice  24     USA
1    Bob  30  Canada
2  Carol  27      UK

解説

  1. pd.read_clipboard():この関数は、クリップボードにある表形式のデータを自動的に読み込みます。データがタブ区切りまたはカンマ区切りであれば適切に処理されます。
  2. データ確認:読み込んだDataFrameをprint(df)で表示し、意図した通りにデータが読み込まれているか確認します。

クリップボードデータのクレンジング例

時には、クリップボードにコピーされたデータに余計なヘッダー行やフッター行、空白行などが含まれていることがあります。こうした不要なデータを取り除き、きれいなDataFrameにする方法を紹介します。

例:余計なヘッダー行や空白行の除去

例えば、クリップボードのデータが以下のような構造になっているとします:

--------------------
| 本日の日付: 2024年11月13日 |
--------------------
| 名前 | 年齢 | 国籍 |
--------------------
| Alice | 24 | USA |
| Bob   | 30 | Canada |
| Carol | 27 | UK |
--------------------

上記のようなデータには不要な行が含まれているため、read_clipboard()で読み込んだ後にクレンジングが必要です。以下のコードで、不要な行を削除し、空白セルがあれば取り除く方法を示します。

import pandas as pd

# クリップボードからデータを読み込む
df = pd.read_clipboard()

# 比較のために読み込んだままの状態を表示
print(df)

# 余計なヘッダー行や空白行を削除する
# 例えば、最初の2行が不要な場合
df = df.drop([0])  # インデックス0の行を削除
df.columns = ["Name", "Age", "Country"]  # カラム名を手動で設定

# 空白行が残っている場合は削除
df = df.dropna(how='all')  # 全ての列がNaNの行を削除

# インデックスをリセット
df = df.reset_index(drop=True)

print(df)

コード解説

  1. df.drop([0]):最初の1行に不要なヘッダーやメタ情報が含まれているため、drop()で削除しています。
  2. df.columns = [...]:カラム名を手動で設定しています。元のデータにカラム名がない場合に便利です。
  3. df.dropna(how='all'):データの整形時、全ての列がNaN(空白)の行を削除します。
  4. df.reset_index(drop=True):削除後にインデックスをリセットし、DataFrameをきれいな形に整えます。

コードの実行結果は以下のとおりです。想定通り、不要な部分の削除とカラム名の変更ができています。

  本日の日付:2024年11月13日 Unnamed: 1 Unnamed: 2
0                名前         年齢         国籍
1             Alice         24        USA
2               Bob         30     Canada
3             Carol         27         UK
    Name Age Country
0  Alice  24     USA
1    Bob  30  Canada
2  Carol  27      UK

まとめ

Pandasのread_clipboard()は、クリップボードにコピーしたデータを直接DataFrameに変換する便利な方法です。ただし、データに不要な行が含まれることがあるため、読み込み後にデータクレンジングを行うと良いでしょう。上記の方法を参考にして、データを整形した上で利用することで、効率よくデータ分析を進めることが可能です。

参考リンク

少しだけPRです。

Pandasについて詳しく知りたいかた、もっと使いこなしたい方におすすめの本です。数年前に購入しましたが、今も手元に置いて時々見返しています。「pandasクックブック Pythonによるデータ処理のレシピ」Theodore Petrou著、黒川利明訳。

最後まで読んでいただきありがとうございました。73

コメント

タイトルとURLをコピーしました