提问者:小点点

fillna()不允许浮点值


我正在使用我的数据集的副本测试一个简单的估算方法。我基本上是试图用目标变量分组的分类方法来计算缺失的值。

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岁。

非常感谢。

编辑:我只是简单地复制了调用函数的旧代码,并现在纠正了它。不是我原始代码中的问题;问题仍然存在。


共2个答案

匿名用户

看看这是怎么回事

为了测试它,我设置了一个简单的案例

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

当做