1

根据文档,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. NaN 年龄将根据其在整个数据集中的中值填充
  3. NaN Embarked 将根据给定 Pclass 特征值的中值填充

所以经过一些数据操作,我得到了这个数据框:

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

它说的是Pclass == 1最常见Cabin的是C. 鉴于此,在我的原始数据框中,df我想df['Cabin'] == nullC.

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

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

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

谢谢你。

4

1 回答 1

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})
于 2017-07-05T09:50:55.980 回答