【问题标题】:how can i replace mean instead of missing values in python如何在 python 中替换均值而不是缺失值
【发布时间】:2021-08-05 16:37:34
【问题描述】:

在下面的代码中,我尝试替换均值而不是缺失值,但我无法获得尝试的结果,因为此数据包含特殊字符“?”。当数据中没有问号时,此代码有效data.fillna(data.mean())。当我尝试估算方法时,出现以下错误:

ValueError:不能对非数字数据使用均值策略: 无法将字符串转换为浮点数:

此数据还包括缺少值的字符串列,如何修复字符串列(例如列 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)```

【问题讨论】:

  • 你到底想做什么?你想换吗?与该列的平均值?还是整个数据框的平均值?另外,您希望文本在 rbc 中而不是 Nan 中是什么?
  • 数据中有很多行带有不需要的 '\t' 字符(第 38 41 65 66 67 77 89 134 139 163 186 189 195 215 231 行)。您有 2 行以逗号结尾(第 70 73 行),因此 Pandas 删除它们(预计 25 个字段,看到 26 个)。我认为你真的需要在使用 Pandas 之前清理数据
  • @JonathanLeon 我正在尝试修复尽可能多的数据。是的,我想更换?使用该列的平均值,我想删除带有字符串 NaN 的行。

标签: python pandas nan


【解决方案1】:

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

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

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

所以尝试将这些列转换为浮点数(不是 int,因为 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 现在已替换为每列的平均值(当然, 列现在是浮动的,而不是原来的 int,但这应该很容易 修复)。

【讨论】:

    【解决方案2】:

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

    选择数字列。

    data = data.select_dtypes('number')
    

    用平均值填充数字列。

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

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 2018-02-05
      • 2019-08-15
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      • 1970-01-01
      相关资源
      最近更新 更多