是否有可能为特定列填充值?
例如,如果我有3列:
- A(分类):不包含任何缺失值
- B(数字):不包含任何缺失值
- C:假设此列包含数字数据并且其中一些数据缺失。我只想在此列中进行填充。
是否有可能为特定列填充值?
例如,如果我有3列:
from sklearn.preprocessing import Imputer
imp = Imputer(missing_values=0, strategy="mean", axis=0)
df["C"] = imp.fit_transform(df[["C"]]).ravel()
如果你有一个包含多列缺失数据的DataFrame,并且你想要根据其他列来填补特定的列,你可以先填补所有的数据,然后再取出你所需的特定列:
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)
正如你所说,某些列没有缺失数据,这意味着当你使用任何的填补方法(如均值、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)