2016-11-17 10 views
3

一部のDataFrameおよびSeriesメソッドには、methodパラメータがあります。pandas(python)で独自のfillメソッドパラメータを定義する方法は?

DataFrame.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None, **kwargs) 

、以下の値を取ることができる方法のパラメータ:{なし、 'バックフィル'/'bfill'、 'パッド'/'ffill'、 '最も近い'}

しかし、私は」は、例えばD等にDEFそれは次のように使用することができるように、今度は、シリーズの中に既に存在している値を使用して、ギャップを埋める方法を定義しますフィルイン機能のいくつかの並べ替え:

df = DataFrame.fillna(method='new_method') 
+0

あなたが望むものを明確にすることはできますか? 'method'パラメータは任意の関数を受け入れないので、私が理解しているところでは、' fillna'メソッドをモンキーパッチするか、ソースコードを修正する必要があるように思えます。 –

+0

@ juanpa.arrivillagaええ私は正しい方法は、ソースコードを変更することだと思う。よく私は、シリーズ内の最も近い値の平均値でギャップを埋める関数が必要です。私は次のような意味です:1 NaN 3 - > 1 2 3. – weeCoder

+1

あなたは 'fillna'メソッドでそれを使用できる必要がありますか?独自の関数を記述し、ソースコードだけを残しておくほうが良いでしょう。 –

答えて

0

あなたの非常に具体的な場合(最も近い値の平均値)、あなたがこれを行うことができます:前後の塗りつぶしを平均化することにより

import pandas as pd 
import numpy as np 

col1 = np.array([0, 1, np.nan, 4]) 
col2 = np.array([0, np.nan, 2, 5]) 

df = pd.DataFrame({"col1" : col1, "col2" : col2}) 

# Trick: average forward and backward fill 
df = 0.5 * (df.fillna(method="bfill") + df.fillna(method="ffill")) 

を他のすべての値を維持しながら、あなたは平均を取得します(ただし、丸め誤差のために)変わりません。しかし、それは最初と最後の列ではうまくいきません。 (しかし、あなたはそれが受け入れられるならば、ffillとbfillをもう一度使うことができます)

+0

を与えるが、それは何よりも好奇心の質問であった。私は、私がカスタムメソッドのパラメータを設定できるようにするために、何かを再定義することが可能かどうかを知りたいだけです。私は知っている、それはほとんど常にそのトリックを行う回避策を見つけることが可能です。 – weeCoder

関連する問題