Scikit-learn - 在特定列中计算值

时间:2018-04-12 21:12:05

标签: pandas dataframe scikit-learn na imputation

是否可以为特定列计算值?

例如,如果我有3列:

  • A (分类):不包含任何缺失值
  • B (数字):不包含任何缺失值
  • C :假设此列包含数字数据,其中一些数据丢失。我只想在本专栏中进行估算。

感谢您的回答。

3 个答案:

答案 0 :(得分:2)

您可以使用numpy.ravel

from sklearn.preprocessing import Imputer
imp = Imputer(missing_values=0, strategy="mean", axis=0)
df["C"] = imp.fit_transform(df[["C"]]).ravel()

答案 1 :(得分:1)

如果您的数据框在多列中缺少数据,并且您想根据其他列估算特定列,则可以估算所有内容并获取所需的特定列:

from sklearn.impute import KNNImputer
import pandas as pd

imputer = KNNImputer()
imputed_data = imputer.fit_transform(df)  # impute all the missing data
df_temp = pd.DataFrame(imputed_data)
df_temp.columns = df.columns
df['COL_TO_IMPUTE'] = df_temp['COL_TO_IMPUTE']  # update only the desired column

另一种方法是将所需列中的所有缺失数据转换为不包含在其他列中的唯一字符,如果数据是字符串,则说 #(如果数据是字符串,则说 max + 1数据是数字),然后告诉插补者您的缺失数据是#

from sklearn.impute import KNNImputer
import pandas as pd

cols_backup = df.columns
df['COL_TO_IMPUTE'].fillna('#', inplace=True)  # replace all missing data in desired column with with '#'
imputer = KNNImputer(missing_values='#')  # tell the imputer to consider only '#' as missing data
imputed_data = imputer.fit_transform(df)  # impute all '#'
df = pd.DataFrame(data=imputed_data, columns=cols_backup)

答案 2 :(得分:-1)

正如您所说,某些列没有缺失数据,这意味着当您使用均值,KNN或其他任何一种插补方法时,只会在C列中插补缺失值。 只需要将丢失的数据传递给任何插补方法,即可获得不丢失的完整数据。

imr = SimpleImputer(missing_values=np.NaN, strategy='mean')
imr = imr.fit(with_missing)
SimpleImputer()
imputed_data = imr.transform(with_missing)

或使用kNN不受欢迎

 imputer_KNN = KNNImputer(missing_values="NaN", n_neighbors=3, weights="uniform", metric="masked_euclidean")
imputed_data = imputer_KNN.fit_transform(with_missing)