pandasでクリップボードの中身をDataFrameとして取得するread_clipboard

Modified: | Tags: Python, pandas

pandasの関数read_clipboard()を使うと、実行時にクリップボードに保存されている内容をDataFrameとして読み取ることができる。スクリプトファイル.pyだと使いにくいかもしれないが、Jupyter Notebookなどの対話的な環境で使うとすごく便利。

なお、read_clipboard()とは逆にDataFrameをクリップボードにコピーするメソッドto_clipboard()も用意されている。以下の記事参照。

DataFrameに限らずPythonでクリップボードを操作するにはpyperclipを使う。

read_clipboard()

デフォルトでは引数sep='\\s+'(正規表現)で、空白文字がデリミタ(区切り文字)となっている。

Webページの表(table要素)や、ExcelやNumbersなどの表計算ソフトのセルをコピーするとタブで区切られてコピーされるので、そのままDataFrameに変換できる。

Wikipedia日本語版のPython(2018年1月時点)の表をコピーしてread_clipboard()を実行する例を示す。ここでは最後にto_csv()メソッドでCSVファイルとして保存している。

import pandas as pd

df = pd.read_clipboard()
print(df)
#    バージョン    リリース日[16]
# 0    3.0   2008年12月3日
# 1    3.1   2009年6月27日
# 2    3.2   2011年2月20日
# 3    3.3   2012年9月29日
# 4    3.4   2014年3月16日
# 5    3.5   2015年9月13日
# 6    3.6  2016年12月23日

df.to_csv('data/dst/test.csv')

コピーした内容が空白で区切られていない場合は引数sepを適宜設定する。例えば、カンマ,区切りの場合はread_clipboard(sep=',')とすればOK。

read_clipboard()は内部でクリップボードの中身をread_csv()に渡しており、read_csv()と同じ引数が指定できる。詳細は以下の記事を参照。

例えば、デフォルトでは上の例のように最初の行(ヘッダー)が列名columnsとして扱われる。ヘッダーがない表に対しては引数header=Noneとすればよい。

なお、特定のWebページの表を定期的に読み込んだり、同じレイアウトの大量のExcelファイルから特定の位置のデータを読み込んだりする場合は、いちいちクリップボードにコピーするよりもread_html()read_excel()を使うほうが楽。以下の記事を参照。

関連カテゴリー

関連記事