我想用中位数估算一个称为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/
中使用答案 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)) ```