PandasのDataFrame(Series)で、Decimal型を含む列を検出する方法


Decimal型の数値を含むDataFrame(Series)を、matplotlibでグラフ表示したいのですが、  
Decimal型そのままのデータではエラーとなり、グラフ表示できないようです。  
そこで、float型に変換しグラフ表示したいのですが、それぞれの列がDecimal型であるか判定するにはどうしたらよいでしょうか？  
pd.Series.dtypeでは、object型と表示されてしまい判断できないようです。  
要素まで参照しなければ、分からないものなのでしょうか？

[code]

    import decimal
    import pandas as pd
    
    df = pd.DataFrame(
        data=[
            {'aa': 'A0', 'bb': 100.1, 'cc': decimal.Decimal('100.1')},
            {'aa': 'A1', 'bb': 200.2, 'cc': decimal.Decimal('200.2')},
            {'aa': 'A2', 'bb': 250.9, 'cc': decimal.Decimal('250.9')},
        ],
        index=[
            pd.Timestamp('2023/04/01', tz='Asia/Tokyo'),
            pd.Timestamp('2023/04/02', tz='Asia/Tokyo'),
            pd.Timestamp('2023/04/03', tz='Asia/Tokyo'),
        ]
    )
    
    df.info()
    display(df)
    print(f"cc列のdtype:[{df['cc'].dtype}]")
    # ↑DataFrameもしくはSeriesからでは、object型と表示されてしまうので、
    # Decimal型かどうか判定できない？
    
    for item in df['cc']:
        print(type(item), item)
    
[/code]

↓確認用コードの実行結果です。  
[![画像の説明をここに入力](https://i.stack.imgur.com/lJfiB.png)](https://i.stack.imgur.com/lJfiB.png)

【追記】  
以下のように、Seriesを抽出してplotするとエラーが発生します。  
多数の列があり、どの列がどの型か分からなくて、質問しました。

[code]

    import decimal
    import pandas as pd
    
    df = pd.DataFrame(
        data=[
            {'aa': 'A0', 'bb': 100.1, 'cc': decimal.Decimal('100.1')},
            {'aa': 'A1', 'bb': 200.2, 'cc': decimal.Decimal('200.2')},
            {'aa': 'A2', 'bb': 250.9, 'cc': decimal.Decimal('250.9')},
        ],
        index=[
            pd.Timestamp('2023/04/01', tz='Asia/Tokyo'),
            pd.Timestamp('2023/04/02', tz='Asia/Tokyo'),
            pd.Timestamp('2023/04/03', tz='Asia/Tokyo'),
        ]
    )
    
    # ax = df['bb'].plot()  # ←正しくグラフが書ける
    # ax = df['cc'].plot()  # ←エラー（no numeric data to plot）が発生する。
    ax = df['cc'].astype(float).plot()  # ←正しくグラフが書ける
    
[/code]




> Decimal型を含む列
[code]

    dfx = df.applymap(type).eq(decimal.Decimal)
    col = dfx.loc[:, dfx.any()].columns
    print(col)
    
    # ['cc']
    
[/code]




変換するだけなら以下のように

[code]

    df['cc_float'] = df['cc'].astype(float)
    
    df.iloc[1,1] = 207
    df.plot()
    
[/code]

[![plot](https://i.stack.imgur.com/Bn9jC.png)](https://i.stack.imgur.com/Bn9jC.png)

