如何使用 apply 函数删除 z 分数(3 或 -3)的异常值

问题描述 投票:0回答:2

我正在研究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

我该如何修复它?

python-3.x pandas data-cleaning
2个回答
0
投票

lambda
语法是这样的,在
x:
之后,您只需陈述函数值,而不重复
x
(除了本例中的条件)。

df['X'].apply(lambda x: 3 if x > 3 else (-3 if x < -3 else x))

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
© www.soinside.com 2019 - 2024. All rights reserved.