#python #pandas
#python #pandas
Вопрос:
Данные выглядят примерно так
| 2019-08-13 00:30:00 | 1 | 2 | 3 |
| 2019-08-13 01:00:00 | 2 | 3 | 1 |
| 2019-08-13 01:30:00 | 1 | 1 | 1 |
| 2019-08-13 02:00:00 | 1 | 1 | 1 |
Первый столбец является ключом для моих данных, а остальные необходимо нормализовать
pandas распознает связь, когда я звоню .head(n)
, и добавляет дату. Однако, когда я пытаюсь нормализовать столбцы, дата либо исчезает, либо нормализуется с данными (что приводит ко всем нулям), либо нормализация просто не выполняется.
x = df_data.values[:1]
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df_data[:1] = pd.DataFrame(x_scaled)
Как вы нормализуете все столбцы, т.Е. 1,2,3, сохраняя при этом первый (0) в кадре.
Ответ №1:
Преобразовать первый столбец в индекс, например, если имя первого столбца date
:
print (df_data)
date a b c
0 2019-08-13 00:30:00 1 2 3
1 2019-08-13 01:00:00 2 3 1
2 2019-08-13 01:30:00 1 1 1
3 2019-08-13 02:00:00 1 1 1
from sklearn import preprocessing
df_data = df_data.set_index('date')
x = df_data.to_numpy()
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df_data = pd.DataFrame(x_scaled, columns=df_data.columns, index=df_data.index)
print (df_data)
a b c
date
2019-08-13 00:30:00 0.0 0.5 1.0
2019-08-13 01:00:00 1.0 1.0 0.0
2019-08-13 01:30:00 0.0 0.0 0.0
2019-08-13 02:00:00 0.0 0.0 0.0
В вашем решении выберите все столбцы без first by DataFrame.iloc
, first :
означает все строки и 1:
выберите все столбцы, исключая first, используйте solution и последнее назначение обратно:
from sklearn import preprocessing
x = df_data.iloc[:, 1:].to_numpy()
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(x)
df_data.iloc[:, 1:] = x_scaled
print (df_data)
date a b c
0 2019-08-13 00:30:00 0.0 0.5 1.0
1 2019-08-13 01:00:00 1.0 1.0 0.0
2 2019-08-13 01:30:00 0.0 0.0 0.0
3 2019-08-13 02:00:00 0.0 0.0 0.0