我正在研究 UCI 心脏病,并将所有可测量值更改为 z 分数,我想将大于 3 或小于 -3 的值分别替换为 3 和 3 或替换为平均值。
我的示例代码是:
> import pandas as pd import numpy as np
>
> df= pd.DataFrame({'X': np.random.randn(10),
> 'Y': np.random.randn(10)})
>
> df=df.append(pd.DataFrame({'X':np.array([3,-3,3.3,4]),
> 'Y':np.array([-3.4,2,1,5])}),ignore_index=True)
>
> df['X'].apply(lambda x: x=3 if x>3 else (x = -3 if x<-3 else x))
但我收到以下错误:
File "<ipython-input-144-8d678556d1e7>", line 1
df['X'].apply(lambda x: x=3 if x>3 else (x= -3 if x<-3 else x))
^
SyntaxError: invalid syntax
我该如何解决?
答案 0 :(得分:0)
lambda
的语法是这样的,在 x:
之后,您只需说明函数值,而无需重复 x
(本例中的条件除外)。
df['X'].apply(lambda x: 3 if x > 3 else (-3 if x < -3 else x))
答案 1 :(得分:0)
让我们尝试用 Series.clip 代替:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{'X': np.array([3, -3, 3.3, 4]),
'Y': np.array([-3.4, 2, 1, 5])}
)
df['X'] = df['X'].clip(lower=-3, upper=3)
print(df)
输出:
X Y
0 3.0 -3.4
1 -3.0 2.0
2 3.0 1.0
3 3.0 5.0
或 DataFrame.clip 应用于整个框架:
import pandas as pd
import numpy as np
df = pd.DataFrame(
{'X': np.array([3, -3, 3.3, 4]),
'Y': np.array([-3.4, 2, 1, 5])}
)
df = df.clip(lower=-3, upper=3)
print(df)
输出:
X Y
0 3.0 -3.0
1 -3.0 2.0
2 3.0 1.0
3 3.0 3.0