96805


DataFrame.applyメソッドの戻り値の型が、  
データがＮ件のときはSeries型が戻り、  
データがＮ件のときはDataFrame型が戻るため困っています。

デバッグしたところ、データがゼロ件のときも、applyする関数が呼び出され、  
例外が発生したことが原因でした。  
ゼロ件のときは、どのような処理にするべきか、教えていただけないでしょうか。  
（どのように修正するのが正しいでしょうか？）

ゼロ件のときを考慮して、applyを適用する関数に、判定文を入れなければならないものなのでしょうか？  
もしくは、ゼロ件のときは、applyを適用する関数が呼び出されないよう指定できないでしょうか？

[code]

    import pandas as pd
    
    print('PandasのVersion', pd.__version__)
    
    
    def concat_col(series: pd.Series):
        """ふたつの列の値を連結する。"""
        print(type(series))
        print(series)
        return series['aa'] + '_' + series['bb']  # ←dfがゼロ件のとき、ここで例外が発生します。
    
    # ◇Ｎ件の場合
    df = pd.DataFrame(data=[
        {'aa': 'aa0', 'bb': 'bb0'},
        {'aa': 'aa1', 'bb': 'bb1'},
    ], index=[0, 1])
    display(df)
    series = df.apply(concat_col, axis='columns')
    print('戻り値の型:', type(series))
    
    # ◇ゼロ件の場合
    df = pd.DataFrame(data=[], columns=['XX', 'YY'])
    display(df)
    series = df.apply(concat_col, axis='columns')
    print('戻り値の型:', type(series))
    
    
[/code]

以下、実行結果です。

[![画像の説明をここに入力](https://i.stack.imgur.com/BO5Lr.png)](https://i.stack.imgur.com/BO5Lr.png)


CC BY-SA 4.0
2023-11-16T08:25:31.610
96800
2023-11-17T02:29:08.990
2023-11-17T02:29:08.990
3060
53109
question
python python3 pandas
PandasのDataFrame.applyメソッドで、データがゼロ件のときの処理方法について


コメントでのアドバイスを参考に、以下のように`result_type='reduce'`を指定することでゼロ件の場合はapplyを適用する関数は呼び出されなくなりました。  
さらに、applyの結果はゼロ件のSeriesを戻すようになり、期待した結果が得られました。

[code]

    series = df.apply(concat_col, axis='columns', result_type='reduce')
    
[/code]


CC BY-SA 4.0
2023-11-17T01:13:11.137
96805
2023-11-17T01:15:56.653
2023-11-17T01:15:56.653
3060
53109
96800
answer