2017-05-18 2 views
1

qcutを適用する必要がある何千ものシリーズ(DataFrameの行)があります。定期的に、所望の分位(2位数対たとえば、1つの値)よりも少ない値を持つシリーズ(行)があります:私はそれに.quantile()を適用するパンダはクオンタイルよりも少ない値を持つシリーズでqcutを使用します

>>> s = pd.Series([5, np.nan, np.nan]) 

、それが(2分位に侵入問題はありません同じ境界値)

>>> s.quantile([0.5, 1]) 
0.5 5.0 
1.0 5.0 
dtype: float64 

しかし、私は変位値の数の整数値で.qcut()を適用すると、エラーがスローされます。

>>> pd.qcut(s, 2) 
... 
ValueError: Bin edges must be unique: array([ 5., 5., 5.]). 
You can drop duplicate edges by setting the 'duplicates' kwarg 

イブ私はduplicates引数を設定した後、N、それはまだ失敗:

>>> pd.qcut(s, 2, duplicates='drop') 
.... 
IndexError: index 0 is out of bounds for axis 0 with size 0 

私はこの作業を行うにはどうすればよいですか? [OK]を、これは可能性があります回避策

0  (4.999, 5.000] 
1    NaN 
2    NaN 
+0

pd.qcut(s、2)のためのあなたの望ましい出力は何ですか?あなたは1つのユニークな価値しか持たず、なぜ1つ以上のビンを作りたいのですか? – Allen

+0

非常に具体的なケースを抽出しています。実際には私は何千ものシリーズを持っていますが、そのすべてを切る必要があります。しかしqcut()はこのような外れ値の行に問題を引き起こします。私は希望の出力で質問を修正しました。 – Zhang18

+0

'qcut'を' try-except'ブロックで囲んで障害のあるシリーズを捕まえてください(あまりにも短いものを取得するだけで十分です)。半手動で半手動で処理してください –

答えて

2

です(。そして等価的にpd.qcut(s, [0, 0.5, 1], duplicates='drop')も動作しません)

所望の出力は5.0は、単一のビンに割り当てられ、NaNが保存されていることですあなたのために働く。

pd.qcut(s,len(s.dropna()),duplicates='drop') 
Out[655]: 
0 (4.999, 5.0] 
1    NaN 
2    NaN 
dtype: category 
Categories (1, interval[float64]): [(4.999, 5.0]] 
0

python 2.7の代わりにpython 3.5を使用します。 これは私のために働いた

+2

理由について詳しく説明できますか?ユーザーがこの質問に来ると、彼らのプロジェクトを3.xに切り替えることはできませんが、それが何であるかを知ることができれば、問題を回避することができます。 – toonarmycaptain

関連する問題