gpt4 book ai didi

python - 在 scikit-learn 中估算分类缺失值

转载 作者:IT老高 更新时间:2023-10-28 20:30:40 34 4
gpt4 key购买 nike

我有一些带有文本类型列的 pandas 数据。这些文本列有一些 NaN 值。我想要做的是通过 sklearn.preprocessing.Imputer 估算那些 NaN(用最常见的值替换 NaN)。问题在于实现。假设有一个 Pandas 数据框 df,它有 30 列,其中 10 列是分类性质的。一旦我运行:

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

Python 生成 error: 'could not convert string to float: 'run1'',其中 'run1' 是具有分类数据的第一列中的普通(非缺失)值。

非常欢迎任何帮助

最佳答案

要对数值列使用平均值,对非数值列使用最常见的值,您可以这样做。您可以进一步区分整数和 float 。我想将中位数用于整数列可能是有意义的。

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 - 在 scikit-learn 中估算分类缺失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25239958/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com