用numpy数组值填充Pandas列NaNs

问题描述

很抱歉,对于新手来说,这个问题似乎也是如此,但我一直在寻找找不到的答案。

因此,我有一个包含许多NaN值的数据集,并且我一直在进行一些回归来预测这些空值,并且由于该预测是以numpy.ndarray的形式给出的,因此我试图填补那些数组的列都没有成功。

我的意思是,该列是这样的:

           ['Records']
      101       21
      102       22
      103       23 
      104       24
      106       NaN
      107       NaN
      108       NaN
      109       NaN
      110       NaN
      111       29
      112       30

数组为:

   y_pred = [25,26,27,28]

因此,fillna不会处理numpy数组来完成这项工作,而我的尝试是将数组设置为dict,pandas列等,但是没有任何效果

另外,另一个问题是数组的长度总是与原始列不同。

感谢您的见识。

解决方法

如果要用数组的所有值替换所有缺失的值,则首先必须有相同数量的缺失值,例如数组的长度:

#added value
y_pred = [25,26,27,28,30]
m = df['Records'].isna()

df.loc[m,'Records'] = y_pred
print (df)
     Records
101     21.0
102     22.0
103     23.0
104     24.0
106     25.0
107     26.0
108     27.0
109     28.0
110     30.0
111     29.0
112     30.0

如果长度可能不匹配,请创建助手Series,并按长度过滤并传递到Series.fillna

这里的数组长度为

y_pred = [25,28]

m = df['Records'].isna()

LenNaN = m.sum()
LenArr = len(y_pred)

s = pd.Series(y_pred[:LenNaN],index=df.index[m][:LenArr])
print (s)
106    25
107    26
108    27
109    28
dtype: int64

df['Records'] = df['Records'].fillna(s)
print (df)
     Records
101     21.0
102     22.0
103     23.0
104     24.0
106     25.0
107     26.0
108     27.0
109     28.0
110      NaN
111     29.0
112     30.0

此处数组的长度> NaN数:

y_pred = [25,100,200,300]

m = df['Records'].isna()

LenNaN = m.sum()
LenArr = len(y_pred)

s = pd.Series(y_pred[:LenNaN],index=df.index[m][:LenArr])
print (s)
106     25
107     26
108     27
109     28
110    100
dtype: int64

df['Records'] = df['Records'].fillna(s)
print (df)
     Records
101     21.0
102     22.0
103     23.0
104     24.0
106     25.0
107     26.0
108     27.0
109     28.0
110    100.0
111     29.0
112     30.0

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...