スポンサードリンク



こんにちは。sinyです。

この記事では、ちょっとマニアックなpythonのテクニック(Noneを返すメソッドの標準出力結果を再利用する方法)についてご紹介します。

例えば、何かしらの情報を標準出力してくれるけどNoneをReturnするような標準メソッドがあった場合、出力結果を変数に格納してもNoneが返ってきてしまうので、出力結果をプログラムの中で再利用するといったことができません。

これだけだとちょっとイメージしづらいかと思いますので、具体例で説明します。

pandasでデータフレームの統計サマリーを表示してくれるDataFrame.infoメソッドは皆さんもよくご存じだと思います。

infoメソッドは戻り値がNoneなので、出力結果を変数に代入してもNoneが格納されるだけなので出力結果を再利用することができません。

例えば以下のようにDataFrameを定義します。

 

df.head()を実行すると以下のようにcolumn_1~3はランダムにa,b,cから選択されたデータになってます。

df.info()を実行すると以下のようにサマリーが表示されますよね。

 

ここで、df.info()の結果を変数に入れて表示すると・・・

上記のように「None」が返ってきます。

これは、pandasのinfoメソッドの戻り値がNone(仕様)であるためです。

 

df.info()の出力結果をWEB画面に表示したいんだけどな・・・・

こんなケースでは、io.StringIOを使うことでdf.info()の出力結果を変数に格納することができます。

DataFrame.infoの出力はデフォルトでsys.stdoutなのですが、bufferにパイプ処理することで変数に格納したりファイルに内容を書き込んだりすることができます。

具体的には以下のようなコードで実現できます。

 

ファイルに書き込みたければ以下のようにすればOKです。

 

Djangoで機械学習のフレームワークを自作しているのですが、分析対象のデータサマリーをWEB画面に表示したいようなケースでは今回のテクニックを使うことで実現できます。

以上、「【python】pandasのちょっとマニアックな使い方」でした。

 

おすすめの記事