#python #pandas #dataframe #scikit-learn #data-science
#python #панды #фрейм данных #scikit-learn #наука о данных
Вопрос:
Я хотел стандартизировать значения в моем фрейме данных pandas и сохранить один столбец значений одинаковым, поэтому я использовал ColumnTransformer
. Однако, похоже, что функция не проходит через столбец, который я хочу, чтобы он прошел. df
это мой фрейм данных, вот код:
import pandas as pd
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import StandardScaler
physical_vars = ["DPhill", "DYjj", "mjj", "mll", "mT", "ptTot", "sumOfCentralitiesL", "mL1J1", "mL1J2", "mL2J1", "mL2J2", "ptJ1", "ptJ2", "ptJ3", "METSig"]
other_vars = ["eventNumber", "weight"]
full_var_list = other_vars physical_vars
ct = ColumnTransformer([('Standardizer', StandardScaler(), full_var_list)],'passthrough')
col_names=full_var_list
col_names.append("ProcessID")
tmp_df=df[col_names]
standardized_values=ct.fit_transform(tmp_df) #np_array
df=pd.DataFrame(standardized_values,columns=full_var_list)
Я хочу передать столбец «ProcessId», но когда я распечатываю этот столбец, значения стандартизированы.
Ответ №1:
Это происходит потому, что вы сначала модифицируете список столбцов, а затем применяете преобразователь столбцов. Вы можете проверить
test = ['column1', 'column2']
col_names = test
col_names.append('column3')
test
Вы можете видеть, что test
он также содержит ‘column3’. Вы должны создать копию начального списка, а затем изменить эту копию:
test = ['column1', 'column2']
col_names = test.copy()
col_names.append('column3')
test
Теперь test
не содержит ‘column3’ и ColumnTransformer
будет работать, как ожидалось.