我如何替换 python 中的均值而不是缺失值

how can i replace mean instead of missing values in python

在下面的代码中,我试图替换均值而不是缺失值,但我的尝试无法获得结果,因为该数据包含特殊字符“?”。当数据中没有问号时,此代码有效 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)```

你有'?'的事实'sod' 和 'pot' 列中的字符使 pandas 将这些列解析为字符串,所以即使你这样做

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

该列将同时具有(浮动)NaN 和字符串,因此 pandas 将无法 为它计算一个 mean() 。我相信这就是导致您的 ValueError 的原因。

所以尝试将这些列转换为浮点数(不是整数,因为 np.nan 是浮点数):

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 现在已替换为每列的平均值(当然, 列现在是浮动的,而不是原来的整数,但这应该很容易 修复)。

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

Select 个数字列。

data = data.select_dtypes('number')

用平均值填充数字列。

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