LoginSignup
0
0

More than 1 year has passed since last update.

`pandas.DataFrame` に使うカラム名を保持する `Enum`

Last updated at Posted at 2023-03-03

動機

  • カラム名がvscodeで補完できなくてつらい
  • Enum にするなら同じ文字列は繰り返したくない
from __future__ import annotations
from enum import auto, Enum, unique

class StringEnum(str, Enum):
    """文字列の列挙型

    Note
    ----
    3.11 で追加された `StrEnum` は `auto()` で `str.lower()` を呼び出すが、
    このクラスはそのままの名前を返す
    """

    def _generate_next_value_(name, start, count, last_values):
        return name

    def __str__(self):
        return self.value

    @classmethod
    def values(cls) -> list[str]:
        return [str(i) for i in cls]

つかいかた

import pandas as pd

@unique
class Columns(StringEnum):
    Spam = auto()
    Ham = auto()
    Egg = auto()
    Unchi = "💩"

pd.DataFrame(columns=Columns.values())
# Empty DataFrame
# Columns: [Spam, Ham, Egg, 💩]
# Index: []

NOTE

pd.DataFrame(columns=Columns) でも動くが2023-03-03現在の型定義ではPylanceがエラーを吐くので.values()経由
collections.abc.Collection[str] とは互換するけど list[str] とは互換しない

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0