概要
- この記事は解決策ではなく現象のメモです
- 理由や解決策をご存知の方は教えてください
- 互いにnp.nanを含む2つの集合(setA, setB)をunionした
- setC = setA.union(setB)
- 期待:結果の和集合にはnp.nanは(当然)1つ含まれる
- 結果:結果の和集合にはnp.nanが(なぜか)2つ含まれていた
- 何故にwhy? # 未解決
- 原因を探ってみた
- 和集合に含まれる2つのnp.nanはidが異なる
- np.nanA, np.nanBとする
- 通常のnp.nanのidとも異なる
- np.isnanとmath.isnanでは共にTrue
- np.nanA is np.nan, np.nanB is np.nanはFalse
- 通常はnp.nan is np.nan はTrueのハズ
- 和集合に含まれる2つのnp.nanはidが異なる
- np.nanA, np.nanBの生成過程で別インスタンスになっている?
- なお、元集合は異なるpandas dfの列から生成している
- setA = set(dfA['colname'].unique().tolist())
- setB = set(dfB['colname'].unique().tolist())
- なお、元集合は異なるpandas dfの列から生成している
- 原因を探ってみた
- 暫定対処
- 元集合の生成時にnp.isnanを噛ませた
- ar_A = dfA['colname'].unique()
- setA = set(ar_A[~np.isnan(ar_A)])
- np.nanは処理が全て終わってから要素として追加(どうせ含まれてるので)
- 元集合の生成時にnp.isnanを噛ませた
- 環境
- python 3.8.8
- pandas 1.2.4
- numpy 1.20.1