Я хочу применить нормализацию к нескольким столбцам в кадре данных Pandas, используя цикл for при условии ниже:
Нормализация для столбцов A, B между: [- 1, +1]
Нормализация для столбца C между: [- 40, +150]
и замените результаты в кадре данных и сохраните их как файл csv.
мои данные в формате txt:
id_set: 000
A: 3.29117131
B: -3.68965849
C: 345.9876546
Я уже определил функцию normalize
и вызываю ее после предложений if
и else
и распечатываю их для управления ее работой, но в конце концов я не могу выяснить, как я могу заменить результат как new_value в новом фрейм данных, который называется df_norm
.
def normalize(value, min_value, max_value, min_norm, max_norm):
new_value = ((max_norm - min_norm)*((value - min_value)/(max_value - min_value))) + min_norm
return new_value
#Split data in three different lists A, B and C
dff = pd.read_csv('D:\me4.TXT', header=None)
id_set = dff[dff.index % 4 == 0].astype('int').values
A = dff[dff.index % 4 == 1].values
B = dff[dff.index % 4 == 2].values
C = dff[dff.index % 4 == 3].values
#df contains all the data
df = pd.DataFrame(data, columns=['A','B','C'], index = id_set[:,0])
data = {'A': A[:,0], 'B': B[:,0],'C': C[:,0]}
#next iteration create all plots, change the number of cycles
for i in df:
min_val = df[i].min()
max_val = df[i].max()
if 'C' in i:
#Applying normalization for C between [-40,+150]
new_value = normalize(df[i].values, min_val, max_val, -40, 150)
else:
#Applying normalization for A , B between [-1,+1]
new_value = normalize(df[i].values, min_val, max_val, -1, 1)
df_norm = pd.df(new_value)
#df_norm = df[i].new_value()
print(df_norm)
df_norm.to_csv('df_norm.csv', header=None, index=None)
мой желаемый результат должен быть:
A B C
000 -0.716746 0.158663 112.403310
010 -0.726023 0.037448 113.289702
020 -0.716746 0.165824 112.567557
030 -0.726040 -0.104426 150.000000
040 -0.693538 0.208556 112.372881
050 -0.104061 0.158573 112.176238
060 -0.735354 0.144351 112.148590
070 -0.712112 0.151505 111.973514
080 -0.336932 0.215719 113.076807
090 -0.698181 0.130189 111.839319
010 0.068357 -0.019388 114.346421
011 0.022007 0.165824 112.381444
позже я хочу развить эту нормализацию, применяя гауссову функцию.