Pandas fillna与DataFrame的值

时间:2017-07-04 14:12:13

标签: python pandas fillna

根据文档,fillna value参数可以是以下之一:

value : scalar, dict, Series, or DataFrame
Value to use to fill holes (e.g. 0), alternately a dict/Series/DataFrame of values specifying which value to use for each index (for a Series) or column (for a DataFrame). (values not in the dict/Series/DataFrame will not be filled). This value cannot be a list.

我的数据框看起来像:

PassengerId Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked
0   892 3   Kelly, Mr. James    male    34.5    0   0   330911  7.8292  NaN Q
1   893 3   Wilkes, Mrs. James (Ellen Needs)    female  47.0    1   0   363272  7.0000  NaN S
2   894 2   Myles, Mr. Thomas Francis   male    62.0    0   0   240276  9.6875  NaN Q
3   895 3   Wirz, Mr. Albert    male    27.0    0   0   315154  8.6625  NaN S
4   896 3   Hirvonen, Mrs. Alexander (Helga E Lindqvist)    female  22.0    1   1   3101298 12.2875 NaN S

这就是我想要做的事情:

  1. NaN Cabin将根据给定Pclass特征值
  2. 的中值填充
  3. NaN Age将根据数据集中的中值填充
  4. NaN Embarked将根据给定Pclass特征值的中值填充
  5. 因此,经过一些数据操作后,我得到了这个数据框:

        Pclass  Cabin   Embarked    Ticket
    0   1   C   S   50
    1   2   F   S   13
    2   3   G   S   5
    

    对于Pclass == 1,最常见的CabinC。鉴于此,在我的原始数据框df中,我想用df['Cabin'] == null填充每个C

    这是一个小例子,我可以手工处理每个可能的空组合:

    df_both[df_both['Pclass'] == 1 & df_both['Cabin'] == np.NaN] = 'C'
    

    但是,我想知道我是否可以使用这个派生数据框来自动完成所有这些填充。

    谢谢。

1 个答案:

答案 0 :(得分:0)

如果您想用特定列的中位数或平均值填充所有Nan,您可以执行以下操作。

表示中位数:

df.fillna(df.median())

表示平均值

df.fillna(df.mean())

有关详细信息,请参阅https://pandas.pydata.org/pandas-docs/stable/missing_data.html#filling-with-a-pandasobject

编辑:

或者,您可以使用具有指定值的字典。键需要映射到列名称。这样你也可以在字符串中输入缺失的值。

df.fillna({'col1':'a','col2': 1})