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