pandasでクリップボードの中身をDataFrameとして取得するread_clipboard
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()
を使うほうが楽。以下の記事を参照。