是否可以为特定列计算值?
例如,如果我有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)