Pandas 用numpy数组值填充列nan

Pandas 用numpy数组值填充列nan,pandas,dataframe,regression,sklearn-pandas,fillna,Pandas,Dataframe,Regression,Sklearn Pandas,Fillna,很抱歉,如果这个问题对新手来说太难回答,但我一直在寻找答案,但没有找到答案 所以,我有一个包含大量NaN值的数据集,我一直在做一些回归来预测这些空值,因为预测是以numpy.ndarray的形式给出的,所以我试图用这些数组来填补列的空白,但没有成功 我的意思是,这个专栏是这样的: ['Records'] 101 21 102 22 103 23 104 24 106

很抱歉,如果这个问题对新手来说太难回答,但我一直在寻找答案,但没有找到答案

所以,我有一个包含大量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 column等,但没有任何效果

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


非常感谢您的见解。

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

#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
如果可能长度不匹配,请使用“按长度筛选”创建辅助系列,并传递到:

此处数组的长度
y_pred = [25, 26, 27, 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
y_pred = [25, 26, 27, 28, 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
此处数组的长度>NAN数:

y_pred = [25, 26, 27, 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
y_pred = [25, 26, 27, 28, 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

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

#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
如果可能长度不匹配,请使用“按长度筛选”创建辅助系列,并传递到:

此处数组的长度
y_pred = [25, 26, 27, 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
y_pred = [25, 26, 27, 28, 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
此处数组的长度>NAN数:

y_pred = [25, 26, 27, 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
y_pred = [25, 26, 27, 28, 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

它不能工作,因为不同长度的数组类似于缺失值的数量。它不能工作,因为不同长度的数组类似于缺失值的数量。很明显,这是我的错误,长度在我的具体情况下是相同的。@fega_zero-Super,如果不是,也添加了解决方案。非常感谢!这就是我一直在寻找的,它是有效的。当然,这是我的错误,长度在我的具体情况下是相同的。@fega_zero-Super,如果不是,也添加了解决方案。非常感谢!这就是我一直在寻找的,它是有效的。