如何在python中用不同的方式填充缺失值?

问题描述

我有一个数据集,其中包含多个数值变量和多个有序数值变量。填充缺失值我想对数值变量使用均值,对有序数值变量使用中位数。使用以下代码,它们中的每一个都是单独创建的,不会收集到数据库中。

df = [['age','score'],[10,1],[20,""],["",0],[40,[50,3],[70,[80,[90,[100,1]]

df = pd.DataFrame(data[1:])
df.columns = data[0]

df = df[['age']].fillna(df.mean())
df = df[['score']].fillna(df.median())

解决方法

pandas.DataFrame.fillna 接受键为列名的字典,所以你可以这样做:

import pandas as pd
data = [['age','score'],[10,1],[20,None],[None,0],[40,[50,3],[70,[80,[90,[100,1]]

df = pd.DataFrame(data[1:],columns=data[0])

df = df.fillna({'age':df['age'].mean(),'score':df['score'].median()})
print(df)

输出

     age  score
0   10.0    1.0
1   20.0    1.0
2   57.5    0.0
3   40.0    1.0
4   50.0    0.0
5   57.5    3.0
6   70.0    1.0
7   80.0    1.0
8   90.0    0.0
9  100.0    1.0

请记住,空字符串与 NaN 不同,后者可能是使用 python 的 None 创建的。

,

首先将空字符串替换为缺失值,然后每列替换缺失值:

function adjustCorners(homeOrAway) {
  let updatedMatchEvents = [...matchEvents];
  let cornerEvent = {
    isHome: homeOrAway,eventType: 1,playerId: 0,period: 1,minute: 0,second: 0,};

  // Not event.target.value,pass the value
  return (value) => {
    if (homeOrAway === true) {
      if (value < homeCorners) {
        updatedMatchEvents.pop();
        setMatchEvents(updatedMatchEvents);
      } else {
        updatedMatchEvents.push(cornerEvent);
        setMatchEvents(updatedMatchEvents);
      }
    } else {
      if (value < awayCorners) {
        updatedMatchEvents.pop();
        setMatchEvents(updatedMatchEvents);
      } else {
        updatedMatchEvents.push(cornerEvent);
        setMatchEvents(updatedMatchEvents);
      }
    }
  };
}

您还可以将 DataFrame.agg 用于 df = df.replace('',np.nan) df['age'] = df['age'].fillna(df['age'].mean()) df['score'] = df['score'].fillna(df['score'].median()) print (df) age score 0 10.0 1.0 1 20.0 1.0 2 57.5 0.0 3 40.0 1.0 4 50.0 0.0 5 57.5 3.0 6 70.0 1.0 7 80.0 1.0 8 90.0 0.0 9 100.0 1.0 的聚合值并传递给 DataFrame.fillna

Series