Python:将范围 (0... 无穷大) 到 (0...1) 的值归一化。当输入唯一时,数据框中所有行的输出都相同

Python: normalize values in range (0... infinity) to (0...1). Output is identical for all rows in dataframe when inputs are unique

我发现了一个问题,该问题给出了一个要归一化的方程,但没有解决语法问题:

问题: Normalize any value in range (-inf…+inf) to (0…1). Is it possible?

我要使用的公式:

(1 + x / (1 + abs(x))) / 2

在我的数据框中,输出在我的新 'normalized_column' 中一直是相同的,即使我的 'not_normalized_column' 中的输入变量是唯一的。

我正在按列名访问值:'not_normalized_column'

对列中的所有值执行操作的最佳方法是什么?谢谢!

这是我的(失败的)代码:

import pandas as pd

excel_file = r"C:\Users\kevin\Desktop\file.xlsx"
df = pd.read_excel(excel_file)


for x in df['not_normalized_column']:
    df['normalized_column'] = (1 + x / (1 + abs(x))) / 2 

输出:

print(df.head(20))

    not_normalized_column  normalized_column
0                1.192575           0.866625
1                1.517879           0.866625
2                1.550685           0.866625
3                1.680974           0.866625
4                1.600331           0.866625
5                1.600675           0.866625
6                1.599243           0.866625
7                1.577447           0.866625
8                1.546771           0.866625
9                1.513165           0.866625
10               1.481408           0.866625
11               1.446590           0.866625
12               1.415659           0.866625
13               1.386197           0.866625
14               1.355200           0.866625
15               1.335662           0.866625
16               1.321336           0.866625
17               1.316952           0.866625
18               1.306000           0.866625
19               1.302547           0.866625

我不确定总体答案,但你收到语法错误,我可以看出语法问题。

您的代码的最后一行在 2 之后缺少右括号。 先试试

您缺少一个括号:

尝试 运行 这个,应该可以:

for x in range(-2000,2000, 300):
    y=(1 + x / (1 + abs(x)))/2
    print(y)

回复您更新后的问题: 你想要做的是使用 .apply:

import pandas as pd
d = {'not_normalized_column': [-1000, 1000], 'normalized_column': [None, None]}
df = pd.DataFrame(data=d)
print("This is the toy dataframe before running the normalization:\n",df)
    
df['normalized_column'] = df['not_normalized_column'].apply(lambda x: (1 + x / (1 + abs(x))) / 2)
    
print("\n This is the toy dataframe after running the normalization:",df)