簡體   English   中英

分別替換pandas.dataframe中的NaN

[英]Individually replace NaN in pandas.dataframe

我有一個900 x 7數據框,其中3個字段包含一些NaN值。

我創建了一個函數,使用一種算法根據該行中的其他值來估計每個NaN的可能值,而不是簡單地用某個特征平均值替換這些值。

如何使用自定義函數遍歷每個NaN來更改其值?

我的函數使用行ID,其他要素名稱以及包含NaN的要素作為參數。

例如

custom_fillnan(id=0, ins=["val0", "val1", "val2"], out="valn")

示例數據框:

ID    val0    val1    val2    ...    valn
0      1        2       3     ...    NaN
1      1      NaN       3     ...     4
2      0        0     NaN     ...     1
...

您可以apply IIUC與axis=1一起apply ,並將fillna與自定義函數一起使用:

In [80]: df
Out[80]: 
   ID  val0  val1  val2  valn
0   0     1     2     3   NaN
1   1     1   NaN     3     4
2   2     0     0   NaN     1


In [83]: df.apply(lambda x: x.fillna(pd.np.mean(x.iloc[1:])), axis=1)
Out[83]: 
   ID  val0      val1      val2  valn
0   0     1  2.000000  3.000000     2
1   1     1  2.666667  3.000000     4
2   2     0  0.000000  0.333333     1

可以使用函數代替pd.np.mean x.iloc[1:]是因為據我了解,您只想將val列用於函數。

編輯

如果要獲取缺少值的列名,可以應用或使用該函數進行處理:

def func(x):
    x.loc[x.isnull()] = x.index[x.isnull()]
    return x

In [209]: df.apply(func, axis=1)
Out[209]: 
   ID  val0  val1  val2  valn
0   0     1     2     3  valn
1   1     1  val1     3     4
2   2     0     0  val2     1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM