用中位数估算缺失值

时间:2018-10-13 21:23:46

标签: python

我想用中位数估算一个称为Bare Nuclei的数据框的列,但出现此错误 (“必须是str,而不是int”,“发生在索引Bare Nuclei上”) 以下代码表示列数据的唯一值['Bare Nuclei]

void fus(int *A, int *B, int *C, int n, int m)
{
    int i=0, j=0, k=0;  
    while (i<n || j<m)
        C[k++] = i!=n && (j==m || A[i] < B[j]) ? A[i++] : B[j++];
}

然后,我尝试将data['Bare Nuclei'].unique() array(['1', '10', '2', '4', '3', '9', '7', '?', '5', '8', '6'], dtype=object) 替换为?,然后将nan插入中位数,但是出现了以上错误

nan

要检查数据,可以在此链接https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/

中使用

3 个答案:

答案 0 :(得分:0)

您得到的错误是因为存储在'Bare Nuclei'列中的值存储为字符串,但是mean()函数需要数字。您可以看到它们是调用.unique()的结果中的字符串。

替换'?'字符后,可以使用.astype(float)将序列转换为数字:

data['Bare Nuclei'] = data['Bare Nuclei'].replace('?',np.nan)
data['Bare Nuclei'] = data['Bare Nuclei'].astype(float).apply(lambda x: x.fillna(x.mean()))

答案 1 :(得分:0)

这是更正,并且有效

data['Bare Nuclei'] = data['Bare Nuclei'].replace('?',np.nan).astype(float)
data['Bare Nuclei'] = data['Bare Nuclei'].fillna((data['Bare Nuclei'].median()))

答案 2 :(得分:0)

如果要使用中位数并填写更详细和实际的信息,请选中此功能。

def groupby_median_imputer(data,features_array,*args):
  #unlimited groups
  from tqdm import tqdm
  print("The numbers of remaining missing values that columns have:")
  for i in tqdm(features_array):
    data[i] = data.groupby([*args])[i].apply(lambda x: x.fillna(x.median()))
    print( i + " : " + data[i].isnull().sum().astype(str)) ```