我正在使用我的数据集的副本测试一个简单的估算方法。我基本上是试图用目标变量分组的分类方法来计算缺失的值。
df_test_2 = train_df.loc[:,['Survived','Age']].copy() #copy of dataset for testing
#creating impute function
def impute(df,variable):
if 'Survived'==0: df[variable] = df[variable].fillna(30.7)
else: df[variable] = df[variable].fillna(28.3)
#imputing
impute(df_test_2,'Age')
结果表明插补是成功的,但增加的值是30和28,而不是30.7和28.3。”年龄是64岁。
非常感谢。
编辑:我只是简单地复制了调用函数的旧代码,并现在纠正了它。不是我原始代码中的问题;问题仍然存在。
看看这是怎么回事
为了测试它,我设置了一个简单的案例
import pandas as pd
import numpy as np
data = {'Survived' : [0,1,1,0,0,1], 'Age' :[12.2,45.4,np.nan,np.nan,64.3,44.3]}
df = pd.DataFrame(data)
df
这就得到了数据集
Survived Age
0 0 12.2
1 1 45.4
2 1 NaN
3 0 NaN
4 0 64.3
5 1 44.3
我精确地运行了你的函数
def impute(df,variable):
if 'Survived'==0: df[variable] = df[variable].fillna(30.7)
else: df[variable] = df[variable].fillna(28.3)
这就产生了这样的结果
Survived Age
0 0. 12.2
1 1 45.4
2 1 28.3
3 0 28.3
4 0 64.3
5 1 44.3
正如您在索引3上看到的,行年龄被错误的值填满了。问题是这个'Survived'==0。这永远是错误的。您正在检查字符串是否为0,而它不是。
你可能想要的是
df2 = df[df['Survived'] == 0].fillna(30.7)
df3 = df[df['Survived'] == 1].fillna(28.3)
dfout = df2.append(df3)
输出是
Survived Age
0 0 12.2
3 0 30.7
4 0 64.3
1 1 45.4
2 1 28.3
5 1 44.3
安尼什
我认为更好的方法是使用熊猫中可用的应用()。此方法在数据框上应用(以行或列为单位)自定义函数。
我让你一个帖子:堆栈问题
文档:文档应用df
当做