Вы не обновляете существующие фреймы данных ни в одной из версий;вы просто создаете новые фреймы данных.
Разница в том, что в повторяющемся коде вы привязываете каждую из переменных X
, X1
и т. д. к каждому из этих новых фреймов данных, в то время как вваш цикл, вы снова и снова привязываете num_x
к каждому новому фрейму данных, поэтому, в конце концов, где-то сохраняется только последний.
В идеале, вы, вероятно, захотите переписать свой код, чтобы он не имелэти отдельные переменные, во-первых, имеют только список из 9 кадров данных - или, может быть, набор из 9 кадров данных с именами X
, X1
и т. д., если имена действительно значимы.
Но если это слишком большое изменение, вы можете сделать что-то вроде этого:
all_x = [X, X1, X2, X3, X4, X5, X6, X7, X8]
idx = 0
for num_x in all_x:
encoder=LabelEncoder()
(num_x) = (num_x).apply(encoder.fit_transform)
onehotencoder = OneHotEncoder(categorical_features='all')
# store the new dataframe back into the list
all_x[idx] = num_x = onehotencoder.fit_transform(num_x).toarray()
np.save('X%d' % idx, num_x)
idx+=1
print(num_x)
# store the list of new dataframes back into the original variable names
X, X1, X2, X3, X4, X5, X6, X7, X8 = all_x
Есть способы, которыми вы можете сделать это чище (например, используя for idx, num_x in enumerate(all_x):
), но я придерживался как можно ближев существующий код.