我有一个庞大的数据框架。我该如何用NaN替换一系列值(-200,-100)?
答案 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.mask
与pd.Series.between
结合使用:
df['A'].mask(df['A'].between(-200, -100), inplace=True)
对于链接,默认情况下请注意inplace=False
,因此您也可以使用:
df['A'] = df['A'].mask(df['A'].between(-200, -100))