以下の内容はhttps://nikkie-ftnext.hatenablog.com/entry/pandas-how-to-create-empty-dataframeより取得しました。


pandasで空のDataFrameを作る(一番単純なテストケースに使いたく)

はじめに

アオのハコのリアタイは、劇薬。nikkieです。

Today I learnedです

目次

DataFrameをcopyしてから加工する関数、一番単純な入力は空のDataFrameでは?

先日のPyCon mini 東海ではpytestでテスト駆動開発のワークショップで登壇しました。
今回の関数を見た時に、その経験からふと思ったのです。

この記事で取り上げる関数は、pandasのDataFrameを受け取り、それをcopyしてから加工して、新たなDataFrameを返しています。
つまり、渡したDataFrameにいくつかカラムが追加されたものが返ります(copyしているので元のDataFrameには副作用なし)。

ということは、空のDataFrameを渡したら、カラムが追加された空のDataFrameが返ってくるはずですよね。
テスト駆動開発っぽくやるなら、まず空のケースのテストなんじゃないかと思ったのです。

空のDataFrameってどう作る?

空のケースのテストを書くにあたって苦労したのが、空のDataFrameの作り方。
現時点の結論は以下です。

empty_df = pd.DataFrame(
    {
        "column1": pd.Series(dtype="int64"),
        "column2": pd.Series(dtype="float64"),
        "column3": pd.Series(dtype="object"),
    }
)

pandasのドキュメントを中心に引いて考えていき、一度動かした後はChatGPTにやりたいことを伝えて書かせました。
苦闘したのよりはるかによい実装だったので、ChatGPT案を採用しています。

DataFrameのドキュメントにドンピシャなものは見つけられていませんが、@dataclassインスタンスからDataFrameを作れるといったことも知りました。
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html

おまけ:空のDataFrameを入力する場合のテスト

% uvx --python 3.12 --with pandas pytest -v script.py
  • Python 3.12.5
  • pytest 8.3.3
  • pandas 2.2.3

Seriesが寄せ集まってDataFrameということなのかもしれないですね。
空のSeriesが集まったので、DataFrameとしても空。

終わりに

pandasで空のDataFrame、キーにカラム名、値にdtypeのみ指定(文字列で指定)したSeriesからなる辞書を渡して作れました!
DataFrameを加工する関数に自動テストを書く試みは、なかなかよいスタートを切ったんじゃないかと思います!




以上の内容はhttps://nikkie-ftnext.hatenablog.com/entry/pandas-how-to-create-empty-dataframeより取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14