Pandas 用numpy数组值填充列nan
很抱歉,如果这个问题对新手来说太难回答,但我一直在寻找答案,但没有找到答案 所以,我有一个包含大量NaN值的数据集,我一直在做一些回归来预测这些空值,因为预测是以numpy.ndarray的形式给出的,所以我试图用这些数组来填补列的空白,但没有成功 我的意思是,这个专栏是这样的: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
['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,如果不是,也添加了解决方案。非常感谢!这就是我一直在寻找的,它是有效的。