Mat*_*hon 3 python dataframe pandas
我有一个巨大的数据框架.我应该如何用NaN替换一系列值(-200,-100)?
您可以使用pd.DataFrame.mask:
df.mask((df >= -200) & (df <= -100), inplace=True)
Run Code Online (Sandbox Code Playgroud)
此方法将True布尔数组中的值标识的元素替换为指定的值,NaN如果未指定值,则默认为该值。
等效地,使用pd.DataFrame.where相反的条件:
df.where((df < -200) | (df > -100), inplace=True)
Run Code Online (Sandbox Code Playgroud)
与许多方法一样,Pandas有助于包含适用于系列而不是整个数据框的版本。因此,对于列df['A'],你可以用pd.Series.mask与pd.Series.between:
df['A'].mask(df['A'].between(-200, -100), inplace=True)
Run Code Online (Sandbox Code Playgroud)
对于链接,inplace=False默认情况下请注意,因此您还可以使用:
df['A'] = df['A'].mask(df['A'].between(-200, -100))
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
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.loc[:, (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
Run Code Online (Sandbox Code Playgroud)