在python中如何替换mean而不是缺少的值

2024-06-01 14:47:19 发布

您现在位置:Python中文网/ 问答频道 /正文

在下面的代码中,我试图替换mean而不是缺少的值,但我无法获得尝试的结果,因为此数据包含特殊字符,即“?”。当数据中没有问号时,此代码工作data.fillna(data.mean())。当我尝试插补方法时,我得到以下错误:

ValueError: Cannot use mean strategy with non-numeric data: could not convert string to float:

此外,此数据还包括缺少值的字符串列,如何修复字符串列中缺少的值(例如,列rbc)

这是我的数据:https://easyupload.io/te2mbc

path = ("C:\\Users\\bbb\\Desktop\\ccc\\group5data.txt")
names = ["age","bp","sg","al","su","rbc","pc","pcc","ba",
         "bgr","bu","sc","sod","pot","hemo","pcv","wc",
         "rc","htn","dm","cad","appet","pe","ane","class"]
data = pd.read_csv(path, names=names)```

Tags: 数据path方法字符串代码datanames错误
2条回答

您的数据由数字列和非数字列组成,为了fillna,意味着您需要只选择数字列

选择数字列

data = data.select_dtypes('number')

用平均值填充数字列

data[data.columns] = data.fillna(a.mean())

在“sod”和“pot”列中有“?”字符这一事实使熊猫成为一种动物 将这些列解析为字符串,因此即使

df.replace('?', np.nan)

该列将同时具有(浮动)NAN和字符串,因此熊猫将无法 计算它的平均值()。我相信这就是造成你的价值观错误的原因

因此,请尝试将这些列转换为float(而不是int,因为np.nan是float):

df = pd.read_csv('C:/a/sw/group5data.txt', error_bad_lines=False, names=names)
df = df.replace('?', np.nan)
df.loc[:, 'sod':'pot'] = df.loc[:, 'sod':'pot'].astype(float)
df = df.fillna(df.mean())

现在,NAN已替换为每列的平均值(当然 列现在是float,而不是原来的int,但这应该很容易理解 修正)

相关问题 更多 >