ExcelファイルをPythonで読み書きしてみる
こんにちは。前回はCSVファイルをPythonで読み書きしました。
すべてのデータがCSVで与えられたり、CSVで使ったりするとは限りません。
今回はExcelで読み書きできるようにしていきます。
OpenPyXLを使ってExcelファイルのデータを読み込む
やはり・・・ですが、ライブラリを使います。ここではOpenPyXLを使ってみます。
Excelファイルを開くとしてもデータが必要なので、埼玉県オープンデータポータルサイトからExcelのファイルをダウンロードして、使うことにします。
今回は、埼玉県内のAED設置場所情報を使います。
それでは、プログラムです。プログラム中の変数 filename で指定しているファイル名は平成31年3月末現在でのデータのファイル名になります。
import openpyxl
file = 'aedh3103.xlsx'
book = openpyxl.load_workbook( file )
sheet = book.worksheets[0]
for row in sheet.rows:
print( row[2].value, row[4].value, row[6].value, row[7].value )
9行目でrow[*].valueと個別にデータを拾っているのは、名称・住所・緯度・経度だけ表示すればいいかな、って理由です。
実行結果は次のようになります。
設置場所_名称 設置場所_住所 設置場所_緯度 設置場所_経度
埼玉県立浦和第一女子高等学校 埼玉県さいたま市浦和区岸町3-8-45 35.8527170214377 139.658443258888
埼玉会館 埼玉県さいたま市浦和区高砂3-1-4 35.8574965870084 139.651975281295
地方職員共済組合埼玉診療所 埼玉県さいたま市浦和区高砂3-14-21 35.8583774804626 139.647567564525
地方職員共済組合埼玉診療所 埼玉県さいたま市浦和区高砂3-14-21 35.8583044342185 139.647607841841
埼玉県庁 埼玉県さいたま市浦和区高砂3-15-1 35.8570040641145 139.649057771358
埼玉県庁 埼玉県さいたま市浦和区高砂3-15-1 35.8587141414799 139.648769115455
(以下省略)
すべてのデータを表示するには、次のようになります。
import openpyxl
file = 'aedh3103.xlsx'
book = openpyxl.load_workbook( file )
sheet = book.worksheets[0]
for row in sheet.rows:
for col in row:
print( col.value )
実行結果については、行数がものすごく多いので割愛します。
OpenPyXLを使ってExcelファイルにデータを書き出す
次に、Excelにデータを書き出します。
import openpyxl
read_file = 'aedh3103.xlsx'
read_book = openpyxl.load_workbook( read_file )
read_sheet = read_book.worksheets[0]
write_file = 'copy.xlsx'
write_book = openpyxl.Workbook()
write_sheet = write_book.active
write_sheet.title = '埼玉県のAED設置場所情報'
for i, row in enumerate( read_sheet.rows, start=1 ):
for j, col in enumerate( row, start=1 ):
write_sheet.cell( i, j, col.value )
write_book.save( write_file )
write_ が付いている行が書き出しに関係したプログラムです。
結局やっていることは、単なるExcelファイルのコピーでしかありませんけどね・・・
OpenPyXLの利点はセルの書式を変えるなどの操作もできますが、欠点として旧形式の .xls ファイルは読めないことでしょうか。
Pandasを使ってExcelファイルのデータを読み込む
次にPandasを使って、Excelファイルを読み込んでみます。xlrd というライブラリも必要になります。
pip install xlrd
それでは、プログラムです。
import pandas
file = 'aedh3103.xlsx'
book = pandas.read_excel( file )
print( book )
print( book.iloc[ 7, 2 ], book.iloc[ 7, 4 ] )
6・7行目は、データを表示しているだけなので、実質3行だけです。
実行結果です。
団体コード 団体名 ... AED画像_ライセンス AED画像_画像テキスト
0 110001 埼玉県 ... NaN NaN
1 110001 埼玉県 ... NaN NaN
2 110001 埼玉県 ... NaN NaN
3 110001 埼玉県 ... NaN NaN
4 110001 埼玉県 ... NaN NaN
5 110001 埼玉県 ... NaN NaN
6 110001 埼玉県 ... NaN NaN
7 110001 埼玉県 ... NaN NaN
8 110001 埼玉県 ... NaN NaN
9 110001 埼玉県 ... NaN NaN
10 110001 埼玉県 ... NaN NaN
11 110001 埼玉県 ... NaN NaN
12 110001 埼玉県 ... NaN NaN
13 110001 埼玉県 ... NaN NaN
14 110001 埼玉県 ... NaN NaN
15 110001 埼玉県 ... NaN NaN
16 110001 埼玉県 ... NaN NaN
17 110001 埼玉県 ... NaN NaN
18 110001 埼玉県 ... NaN NaN
19 110001 埼玉県 ... NaN NaN
20 110001 埼玉県 ... NaN NaN
21 110001 埼玉県 ... NaN NaN
22 110001 埼玉県 ... NaN NaN
23 110001 埼玉県 ... NaN NaN
24 110001 埼玉県 ... NaN NaN
25 110001 埼玉県 ... NaN NaN
26 110001 埼玉県 ... NaN NaN
27 110001 埼玉県 ... NaN NaN
28 110001 埼玉県 ... NaN NaN
29 110001 埼玉県 ... NaN NaN
.. ... ... ... ... ...
546 110001 埼玉県 ... NaN NaN
547 110001 埼玉県 ... NaN NaN
548 110001 埼玉県 ... NaN NaN
549 110001 埼玉県 ... NaN NaN
550 110001 埼玉県 ... NaN NaN
551 110001 埼玉県 ... NaN NaN
552 110001 埼玉県 ... NaN NaN
553 110001 埼玉県 ... NaN NaN
554 110001 埼玉県 ... NaN NaN
555 110001 埼玉県 ... NaN NaN
556 110001 埼玉県 ... NaN NaN
557 110001 埼玉県 ... NaN NaN
558 110001 埼玉県 ... NaN NaN
559 110001 埼玉県 ... NaN NaN
560 110001 埼玉県 ... NaN NaN
561 110001 埼玉県 ... NaN NaN
562 110001 埼玉県 ... NaN NaN
563 110001 埼玉県 ... NaN NaN
564 110001 埼玉県 ... NaN NaN
565 110001 埼玉県 ... NaN NaN
566 110001 埼玉県 ... NaN NaN
567 110001 埼玉県 ... NaN NaN
568 110001 埼玉県 ... NaN NaN
569 110001 埼玉県 ... NaN NaN
570 110001 埼玉県 ... NaN NaN
571 110001 埼玉県 ... NaN NaN
572 110001 埼玉県 ... NaN NaN
573 110001 埼玉県 ... NaN NaN
574 110001 埼玉県 ... NaN NaN
575 110001 埼玉県 ... NaN NaN
[576 rows x 19 columns]
埼玉県立文書館 埼玉県さいたま市浦和区高砂4-3-18
Pandasを使ってExcelファイルにデータを書き出す
最後に、Pandasを使ってExcelにデータを書き出します。
import pandas
file = 'aedh3103.xlsx'
book = pandas.read_excel( file )
df = book.loc[ :, [ '設置場所_名称', '設置場所_住所', '設置場所_詳細', '設置場所_緯度', '設置場所_経度' ] ]
df.to_excel( 'AED設置場所_加工済み.xlsx', sheet_name='AED設置場所' )
6行目は単に列を絞り込んでいるだけなので、書き出している箇所は7行目だけになります。
今回はここまででおしまいにします。それではまた。
ディスカッション
コメント一覧
まだ、コメントがありません