如何在Pandas数据框架中用NaN替换一系列值?

时间:2016-10-20 16:28:09

标签: python pandas dataframe

我有一个庞大的数据框架。我该如何用NaN替换一系列值(-200,-100)?

2 个答案:

答案 0 :(得分:5)

你可以这样做:

In [145]: df = pd.DataFrame(np.random.randint(-250, 50, (10, 3)), columns=list('abc'))

In [146]: df
Out[146]:
     a    b    c
0 -188  -63 -228
1  -59  -70  -66
2 -110   39 -146
3  -67 -228 -232
4  -22 -180 -140
5 -191 -136 -188
6  -59  -30 -128
7 -201 -244 -195
8 -248  -30  -25
9   11    1   20

In [148]: df[(df>=-200) & (df<=-100)] = np.nan

In [149]: df
Out[149]:
       a      b      c
0    NaN  -63.0 -228.0
1  -59.0  -70.0  -66.0
2    NaN   39.0    NaN
3  -67.0 -228.0 -232.0
4  -22.0    NaN    NaN
5    NaN    NaN    NaN
6  -59.0  -30.0    NaN
7 -201.0 -244.0    NaN
8 -248.0  -30.0  -25.0
9   11.0    1.0   20.0

答案 1 :(得分:3)

数据框

您可以使用pd.DataFrame.mask

df.mask((df >= -200) & (df <= -100), inplace=True)

此方法将布尔数组中由True值标识的元素替换为指定值,如果未指定值,则默认为NaN

等效地,将pd.DataFrame.where用于相反的条件:

df.where((df < -200) | (df > -100), inplace=True)

系列

与许多方法一样,Pandas有用地包含了适用于系列而不是整个数据框架的版本。因此,对于列df['A'],您可以将pd.Series.maskpd.Series.between结合使用:

df['A'].mask(df['A'].between(-200, -100), inplace=True)

对于链接,默认情况下请注意inplace=False,因此您也可以使用:

df['A'] = df['A'].mask(df['A'].between(-200, -100))