これは私に多くの問題をもたらしました。そして、私はパンダ系列のnumpy配列の非互換性に困惑しています。ブール配列でシリーズをマスキングする
x = np.array([1,2,3,4,5,6,7])
y = pd.Series([1,2,3,4,5,6,7])
delta = np.percentile(x, 50)
deltamask = x- y > delta
デルタマスクは、ブール値のpandasシリーズを作成します。あなたは
x[deltamask]
y[deltamask]
をすれば
しかし、あなたは、配列がマスクを完全に無視することがわかります。エラーは発生しませんが、長さの異なる2つのオブジェクトになります。
print type(x-y)
print type(x[deltamask]), len(x[deltamask])
print type(y[deltamask]), len(y[deltamask])
はさらに困惑が、私はオペレータ<が異なって扱われていることに気づいた:これはエラーで
x[deltamask]*y[deltamask]
結果などの操作があることを意味します。たとえば、
print type(2*x < x*y)
print type(2 < x*y)
は、それぞれpd.seriesとnp.arrayを提供します。
また、シリーズの
5 < x - y
結果、スライスになりnumpyの配列に渡されたときに、一連のマスクのブール要素が整数に昇格されているのに対しシリーズは、優先されるようですアレイ。
この理由は何ですか? numpyのよう
'pandas'データ構造は' numpy'配列の上に構築されています。 'Series'は' numpy'配列でうまく***をやっていますが、本当に 'numpy'配列ではありません。また、あなたはどういう意味ですか:_シリーズはマスクを完全に無視します。 'deltamask'は全て' False'なので、 'Series'は値を返すべきではありません。 – Abdou
申し訳ありませんが、私は別の方法の周りを意味しました。シリーズは配列マスクを尊重しませんし、配列はシリーズマスクを尊重しません。 – michel
'シリーズ'は 'numpy配列'マスクを尊重すると思います。もう一度チェック。しかし、細かい配列は 'シリーズ'マスクを取っているようには見えません(実際には面白いです)。しかし、 'x [deltamask.values]'はそのトリックを行います。 – Abdou