Как нормализовать все столбцы фрейма данных pandas, но сначала / ключ

#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