pandasのDataFrameに独自メソッドを追加してmethod chainingを貫く (Pandas Flavor)

pandasでmethod chainigで書いていくとき、chainできなくて困る時がある。例えばDataFrameのindexをDateTimeにしたいとき、

df = ...#indexが'2021-09-06'などの文字列のDataFrame
df.index = pd.to_datetime(df.index)

こうすることになるが、これだとmethod chainできない...。
そんな時はPandas Flavorを使ってDataFrameに独自メソッドを追加。

import pandas_flavor as pf

#独自の拡張メソッドを作る
@pf.register_dataframe_method
def to_index_datetime(df):
    df.index = pd.to_datetime(df.index)
    return df

#使い方
after_df = (
    df
    ...色々chainして
    .to_index_datetime() #これでchainできる
)



* 参考

tomaugspurger.github.io

towardsdatascience.com

pypi.org

PowerShellでエクセルを扱いたいとき、ImportExcelが便利

PowerShellでエクセル扱う時はCOMを直接いじることになってあまり便利じゃない。しかもファイル閉じるときはこんなことしないと、excelプロセスが残ってしまう...。

$excel = New-Object -ComObject Excel.Application
$sheet = ...

[System.Runtime.Interopservices.Marshal]::ReleaseComObject($sheet) # 変数の破棄
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) # 変数の破棄

PowerShellでエクセルファイルを扱うのに便利なものを見つけた。
ImportExcel www.powershellgallery.com

これを使うと、Import-Excel, Export-Excel ができます。Import-Csv,Export-Csv的に使えるのです。便利です。

こちらも参考にさせていただきました。
【ImportExcel】Import-Excelコマンドレットの使い方【PowerShell】 | Finance & Journey

書籍「達人プログラマー(第2版)」

古い本を買ってしまったシリーズ。
昔読んだ本の第2版が出ていた。

第1版が出たのは2000年だったようだ。第2版が出ていることは書店でこの本を見るまで知らなかった。最近はなるべく紙の本を買わないようにしているのだが、懐かしくて買ってしまった。第2版は第1版の古くなったところは時代に応じた内容に大幅に書き直されており古臭い感はだいぶ和らいでいて、今でも通用する内容になっている。ただ参考文献がどうにも古すぎるのはしようがないかな。
今時の人はこの本を読んだらどう感じるのだろうか。

VSCode(Visual Studio Code)のproxyの設定

proxy環境下でVSCodeを使うとき、settings.jsonのhttp.proxyではダメで、VSCodeの起動オプションで"--proxy-server"を指定してました。(最初これが分からなくて苦労しました...。)
しかし、ようやく起動オプションは使わなくてもよくなったようです。

Investigate setting Electron's proxy from user setting · Issue #94148 · microsoft/vscode · GitHub

Pyhon 3.9 で pandasでread_excel()すると、AttributeError: 'ElementTree' object has no attribute 'getiterator'

Python 3.9を使い始めました。と言うか、Windowsでscoop使っていて、アップデートでうっかりPython3.9になってしまったのですが。

で、Python3.9とpandasでread_excel()すると、

AttributeError: 'ElementTree' object has no attribute 'getiterator'

になる...。どうやらpandasのread_excel()で使われているxlrdはメンテされてなくPython3.9に未対応のようです。代わりに OpenPyXL を使ってくれとのこと。

pd.read_excel(file, engine="openpyxl")

このようにengineを指定すればよいです。

そうだったのか。pandasの`read_table()`が「非推奨ではない」になっていた。

うーん、pandasのread_table()は非推奨だよと書いてあるのを見かけるので使わないようにしていた。確かに一時期非推奨になるはずだったようだが、実は今では非推奨が取り消されていた。これだ。

Keep (un-deprecate) `read_table()` for API stability · Issue #25220 · pandas-dev/pandas · GitHub

そうだったのか。だったらAPIドキュメントには非推奨の記載を消すだけじゃなくて「一時期非推奨だったけど取り消されたよ。今は非推奨じゃないよ。」って書いてくれ。世の中まだread_table()は非推奨だって書いてある物がいっぱいあるよ。取り消されたの知らなかったよ。

そして、WinUI 3

マイクロソフトがいざなう僕らの旅は、やはり終わらない。

Introducing WinUI 3 Preview 1 - Windows Developer Blog

これまでの道は二又三又たくさん又あって、行き止まりって思ってた道も、結局全部また1つの道に集まってくる...。旧道もなんとか先を通して別れてた道を一つにつなげたのか。しかし、これでめでたし、な予感はしないぞ。私が生きているうちには、先が安心な一本の道はできないような。