Open1
RustのPolarsでOption<f64>をSeriesやDataFrameに変換するときの罠
色々やった結果ぜんぜん「Polarsの罠」ではないことに気がついた。
まあ NaN != NaN であり、 Nan != x (for any double x) であり None == Noneであることに注意しましょうね。そしてNaNを不用意に埋め込まないようにしましょうねという感じ。
下のテストは全部パスする。
#[test]
fn test_polars() {
let vec1: Vec<Option<f64>> = vec![Some(1.0), Some(2.0), Some(3.0), None, Some(5.0)];
let vec2: Vec<Option<f64>> = vec1.clone();
let vec3: Vec<Option<f64>> = vec![Some(1.0), Some(2.0), Some(3.0), Some(NAN), Some(5.0)];
let ser1: Series = Series::new("ser", vec1);
let ser2: Series = Series::new("ser", vec2);
let ser3: Series = Series::new("ser", vec3.clone());
let ser4: Series = Series::new("ser", vec3);
assert!(ser1.series_equal_missing(&ser2));
assert_eq!(ser1, ser2); // None == None
assert_ne!(ser1, ser3); // None != Some(NAN)
assert_ne!(ser3, ser4); // Some(NAN) != Some(NAN)
}