我在Python中有一个数据帧(df(,它有一些功能,但我将使用Age
和Age_Mean
列。
Age
列中,有几个null
值。我想用列中的相同索引替换Age_Mean
空值。
这是我使用的代码:
for i in df:
if df['Age'].isnull().iloc[i] == True:
df['Age'].iloc[i] == df['Age_Mean'].iloc[i]
这是我的错误消息:
键错误:"标签 [年龄] 不在 [索引] 中">
请让我知道此代码有什么问题。
语句for i in df
将循环访问列名。让我们举一个例子来更好地理解这一点:
df = pd.DataFrame({"Age":np.array([2,3,np.nan,8,np.nan]),"Age_mean":np.array([2,5,9,2,1])})
df
因此,数据框将如下所示:
Age Age_mean
0 2.0 2
1 3.0 5
2 NaN 9
3 8.0 2
4 NaN 1
现在让我们看看 for 循环将迭代的内容:
for i in df:
print(i)
输出
Age
Age_mean
现在,当您尝试执行df['Age'].isnull().iloc[i]
时,它将抛出错误,因为在这种情况下i
的值将被Age
。
建议的解决方案:
我们可以在没有 for 循环的情况下做到这一点,如下所示:
nan_index = df['Age'].index[df['Age'].apply(np.isnan)]
df.loc[nan_index,"Age"] = df.loc[nan_index,"Age_mean"]
第一行将返回NaN
Age
值的行的索引。一旦我们知道我们只是用列中的值替换它们 Age_mean
这是由第二个语句完成的。
输出
Age Age_mean
0 2.0 2
1 3.0 5
2 9.0 9
3 8.0 2
4 1.0 1