2021-06-13

idxmin() で TypeError; argmin() got an unexpected keyword argument 'skipna' が起こる

idxmin() にハマった.

起こったこと

idxmin()でエラーが起こる."unexpected" といわれているが,skipnaはキーワード引数に存在する.

pandas.DataFrame.idxmin — pandas 1.4.2 documentation

time = datetime.datetime.strptime(
    '2021-05-09 00:00:00.420000+00:00',
    '%Y-%m-%d %H:%M:%S.%f%z'
)
print(time)  # 2021-05-09 00:00:00.420000+00:00
df = pd.DataFrame(
    [[time, time]],
    columns=['a', 'b'],
)
print(df.idxmin(axis=1))  # TypeError: argmin() got an unexpected keyword argument 'skipna'

解決法

UTCオフセットを消す.pandas.Seriesで時系列を表現しているなら,s.tz_localize(None)でUTCオフセットを消せる.

pandas.Series.tz_localize — pandas 1.4.2 documentation

time = datetime.datetime.strptime(
    '2021-05-09 00:00:00.420000',
    '%Y-%m-%d %H:%M:%S.%f'
)
print(time)  # 2021-05-09 00:00:00.420000
df = pd.DataFrame(
    [[time, time]],
    columns=['a', 'b'],
)
print(df.idxmin(axis=1))
#  0    a
#  dtype: object

その他

比較できない値の場合は以下のようなエラーが出る.[[time, 'aaa']] のようなデータを与えても以下のようなエラーが出る.

 df = pd.DataFrame(
     [[123, 'aa']],
     columns=['a', 'b'],
)
print(df.idxmin(axis=1))  # TypeError: reduction operation 'argmin' not allowed for this dtype

TypeError: argmin() got an unexpected keyword argument 'skipna'というエラーに惑わされたせいで余計な時間を使ってしまった.