python教程—归罪于科学学习中缺失的分类价值-Python实用宝典

python教程—归罪于科学学习中缺失的分类价值

我有一些文本类型列的panda数据。这些文本列中有一些NaN值。我要做的是通过sklearn。preprocessing来算出这些NaN。灌输者(用最频繁的值代替NaN)。问题出在实施上。 假设有一个熊猫dataframe df,它有30个列,其中10个列是分类的。 当我运行:

我有一些文本类型列的panda数据。这些文本列中有一些NaN值。我要做的是通过sklearn。preprocessing来算出这些NaN。灌输者(用最频繁的值代替NaN)。问题出在实施上。
假设有一个熊猫dataframe df,它有30个列,其中10个列是分类的。
当我运行:

    from sklearn.preprocessing import Imputer imp = Imputer(missing_values='NaN', strategy='most_frequent', axis=0) imp.fit(df)

Python生成一个错误:'无法将字符串转换为浮点数:'run1',其中'run1'是包含分类数据的第一列的一个普通值(不丢失)。

欢迎任何帮助

回答

要对数值列使用平均值,对非数值列使用最频繁的值,可以这样做。您可以进一步区分整数和浮点数。我想对整数列使用中值是有意义的。

    import pandas as pd import numpy as np from sklearn.base import TransformerMixin class DataFrameImputer(TransformerMixin): def __init__(self): """Impute missing values. Columns of dtype object are imputed with the most frequent value in column. Columns of other types are imputed with mean of column. """ def fit(self, X, y=None): self.fill = pd.Series([X[c].value_counts().index[0] if X[c].dtype == np.dtype('O') else X[c].mean() for c in X], index=X.columns) return self def transform(self, X, y=None): return X.fillna(self.fill) data = [ ['a', 1, 2], ['b', 1, 1], ['b', 2, 2], [np.nan, np.nan, np.nan] ] X = pd.DataFrame(data) xt = DataFrameImputer().fit_transform(X) print('before...') print(X) print('after...') print(xt)

打印,

    before... 0 1 2 0 a 1 2 1 b 1 1 2 b 2 2 3 NaN NaN NaN after... 0 1 2 0 a 1.000000 2.000000 1 b 1.000000 1.000000 2 b 2.000000 2.000000 3 b 1.333333 1.666667

​Python实用宝典 (pythondict.com)
不只是一个宝典
欢迎关注公众号:Python实用宝典

本文由 Python实用宝典 作者:Python实用宝典 发表,其版权均为 Python实用宝典 所有,文章内容系作者个人观点,不代表 Python实用宝典 对观点赞同或支持。如需转载,请注明文章来源。
2

发表评论