我有一个数据框的列列表,其中包含 NA(如下)。所有这些列的
dtype
是str
.
X_train_objects = ['HomePlanet',
'Destination',
'Name',
'Cabin_letter',
'Cabin_number',
'Cabin_letter_2']
我想用
SimpleImputer
来填写NA的意志最常见的价值(模式)。但是,我得到了ValueError: Columns must be same length as key
。这是什么原因,我的代码对我来说似乎是正确的?
X_train
列的Dataframe样本(称为
Destination
)是np.NA
s:
{'PassengerId': {47: '0045_02',
128: '0138_02',
139: '0152_01',
347: '0382_01',
430: '0462_01'},
'HomePlanet': {47: 'Mars',
128: 'Earth',
139: 'Earth',
347: nan,
430: 'Earth'},
'CryoSleep': {47: 1, 128: 0, 139: 0, 347: 0, 430: 1},
'Destination': {47: nan, 128: nan, 139: nan, 347: nan, 430: nan},
'Age': {47: 19.0, 128: 34.0, 139: 41.0, 347: 23.0, 430: 50.0},
'VIP': {47: 0, 128: 0, 139: 0, 347: 0, 430: 0},
'RoomService': {47: 0.0, 128: 0.0, 139: 0.0, 347: 348.0, 430: 0.0},
'FoodCourt': {47: 0.0, 128: 22.0, 139: 0.0, 347: 0.0, 430: 0.0},
'ShoppingMall': {47: 0.0, 128: 0.0, 139: 0.0, 347: 0.0, 430: 0.0},
'Spa': {47: 0.0, 128: 564.0, 139: 0.0, 347: 4.0, 430: 0.0},
'VRDeck': {47: 0.0, 128: 207.0, 139: 607.0, 347: 368.0, 430: 0.0},
'Name': {47: 'Mass Chmad',
128: 'Monah Gambs',
139: 'Andan Estron',
347: 'Blanie Floydendley',
430: 'Ronia Sosanturney'},
'Transported': {47: 1, 128: 0, 139: 0, 347: 0, 430: 0},
'Cabin_letter': {47: 'F', 128: 'E', 139: 'F', 347: 'G', 430: 'G'},
'Cabin_number': {47: '10', 128: '5', 139: '32', 347: '64', 430: '67'},
'Cabin_letter_2': {47: 'P', 128: 'P', 139: 'P', 347: 'P', 430: 'S'}}
我的代码:
imputer = SimpleImputer(missing_values=np.NaN, strategy='most_frequent')
X_train[X_train_objects] = imputer.fit_transform(X_train[X_train_objects].values.reshape(-1,1))[:,0]
这是您问题中的代码的作用:
的
X_train[X_train_objects]
values
)并使用 .reshape(-1,1)[:,0]
imputer.fit_transform
,它返回一个形状与其输入相同的结果X_train[X_train_objects]
中的所有行(如上所述)具有形状 (5, 6),或者具体来说,只有 6 列这会导致错误:
ValueError: Columns must be same length as key
我相信你的意图是,在按摩了最初在
X_train[X_train_objects]
中找到的值之后,通过用按摩过的值覆盖原始值来更新原始对象。为此,我认为以下方法应该有效:
X_train[X_train_objects] = (
imputer.fit_transform(X_train[X_train_objects].values.reshape(-1,1))[:,0]
.reshape(-1,len(X_train_objects)) )