焼肉パート2
仕事
pandas.read_excelで読み込みがうまくいかない場合がちょこちょこあったのを原因調査してた。
久々にpdb使ってちゃんとデバッグしてみたが、やっぱちゃんとデバッガ使うの便利やわ。
使い方まとめときたいな。いつかやろう。
空列が行インデックスとして読まれてしまう。
以下のような先頭に空行空列がある表を読み込むことを考える。
A | B | C | D | E |
---|---|---|---|---|
col1 | col2 | col3 | ||
1 | 2 | 3 | ||
4 | 5 | 6 |
普通にヘッダ行を指定して読み込むと以下の様に、行インデックスにNaNが設定された3列の列として読み込まれるが、 index_colを指定していないので、普通に5列の表として読んでほしかった。
import pandas as pd pd.read_excel("/path/to/file", header=3)
col1 | col2 | col3 | ||
---|---|---|---|---|
NaN | NaN | 1 | 2 | 3 |
NaN | 4 | 5 | 6 |
これについてはソースをデバッグで追っかけてわかったが、pandas 0.22.0だとヘッダ行で空セルは除去されるというプログラムになっていた。
ただ、0.24.1にバージョンアップしたら普通に5列の表として読まれた。read_excelみたいな基本となる関数でも結構仕様変わってるんだなぁ、気を付けようって話。
ヘッダが複数行ある場合にエラーとなる場合がある。
ヘッダが複数行ある場合、read_excel関数のオプションheaderに行リストを渡すのだが、複数行ヘッダと指定して読み込むファイルで以下のようなエラーが発生していた。
Passed header=[%s] are too many rows for this multi_index of columns
0.24.1のソースで確認したが、io/parsers.py の中の _extract_multi_indexer_columns 関数で起こっているエラーで、ヘッダ行の中で1行まるまる空行の場合起こるエラーだった。
なので、headerで指定する際に空行はあらかじめ除いたうえで指定する必要があった。
読書
『Re:ゼロから始める異世界生活』を相変わらず読んでいた。監視塔攻略し始めのあたりまで読んだ。
スピンオフの聖域でのifの話がなかなかえぐかった。
6章はまだ更新中のようなので、一旦この辺でやめておくことにする。また忘れて読み直しになっちゃうからね。
次は何を読もうかな。真面目に勉強する本を読んだ方がいい気もするがなかなか腰が重い。
食事
お昼は毎度おなじみ野郎ラーメンの豚野郎野菜マシ麺マシ煮卵トッピング
夜は昨日の焼肉の残りとウィンナー。業務スーパーで買ったいつものやつと比べるとお高いウィンナーだったが、高いだけのことはあって、めちゃくちゃうまかった。