![](/img/trans.png)
[英]check on element in a row in a data frame in pandas is NaN then replace it
[英]Pandas data frame: replace nan with the mean of that row
假設我有以下數據框:
import numpy as np
import pandas as pd
df = pd.DataFrame({'A' : [np.nan, 1,2],
'B' : [3, np.nan, 4],
'C': [5,6,np.nan]}).T
>>df
0 1 2
A NaN 1 2
B 3 NaN 4
C 5 6 NaN
要更換np.nan
在該行的平均np.nan
發生后,我用了fillna方法如下:
fill_value = pd.DataFrame({col: df.mean(axis=1) for col in df.columns})
df.fillna(fill_value, inplace=True)
Yields:
0 1 2
A 1.5 1.0 2.0
B 3.0 3.5 4.0
C 5.0 6.0 5.5
我不確定為什么我無法獲得填充方法來執行相同的操作:
mask = np.isnan(df)
masked_df = np.ma.masked_array(df, mask)
means = np.mean(masked_df, axis=0)
df = masked_df.filled(means)
Yields:
array([[ 4. , 1. , 2. ],
[ 3. , 3.5, 4. ],
[ 5. , 6. , 3. ]])
知道如何獲取filled
方法來做同樣的事情嗎? 謝謝。
這是因為在填充的示例中,平均值計算是錯誤的(您使用axis = 0而不是1)。 如果我使用第一個示例中的fill_values
看起來不錯,
import numpy as np
import pandas as pd
df = pd.DataFrame({'A' : [np.nan, 1,2],
'B' : [3, np.nan, 4],
'C': [5,6,np.nan]}).T
mask = np.isnan(df)
masked_df = np.ma.masked_array(df, mask)
fill_value = pd.DataFrame({col: df.mean(axis=1) for col in df.columns})
df = masked_df.filled(fill_value)
print(df)
輸出:
[[ 1.5 1. 2. ]
[ 3. 3.5 4. ]
[ 5. 6. 5.5]]
在下面的工作中,您可以計算逐行均值,並將其作為替換NaN
值的值進行傳遞,您必須對均值進行轉置以便正確執行對齊:
In [154]:
df.fillna(df.mean(axis=1).T, axis=0)
Out[154]:
0 1 2
A 1.5 1.0 2.0
B 3.0 3.5 4.0
C 5.0 6.0 5.5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.