2016-11-17 24 views
3

某些DataFrame和Series方法具有方法參數。例如:如何在pandas(python)中定義自己的填充方法參數?

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

您能澄清一下您想要的嗎?根據我的理解,這聽起來像需要對'fillna'方法進行猴式修補,或修改源代碼,因爲'method'參數不接受任意函數。 –

+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")) 

通過平均向後和向前填充,你會同時保持所有其他值獲得平均(但舍入誤差)不變。但是,它當然不適用於第一行和最後一行。 (但如果可以接受的話,您可以再次使用填寫和填​​寫)

+0

,這更像是一個好奇的問題。我只想知道是否可以重新命名,例如* something *以使我可以設置自定義方法參數。我知道,幾乎總是可以找到一個解決方法來解決問題。 – weeCoder

相關問題