如果我有一个长度为3的DataFrame,有3列
a b c
1 2 3
4 5 6
7 8 9
是否有一种智能方法可以用NaN替换列b
的前两行?
答案 0 :(得分:5)
pd.Series.mask
。df['b'] = df.b.mask(df.index < 2)
df
a b c
0 1 NaN 3
1 4 NaN 6
2 7 8.0 9
如果您的df.index
不是单调递增的整数索引,那么您可以将df.index
替换为np.arange(len(df))
-
df.b.mask(np.arange(len(df)) < 2)
0 NaN
1 NaN
2 8.0
Name: b, dtype: float64
np.where
df['b'] = np.where(df.index < 2, np.nan, df.b)
df
a b c
0 1 NaN 3
1 4 NaN 6
2 7 8.0 9
np.ndarray.__getitem__
类似于Wen的iloc
,对numpy数组进行索引 -
i = df.b.values
i[:2] = np.nan
df['b'] = i
df
a b c
0 1 NaN 3
1 4 NaN 6
2 7 8.0 9
答案 1 :(得分:3)
df.b.iloc[:2]=np.nan
df
Out[481]:
a b c
0 1 NaN 3
1 4 NaN 6
2 7 8.0 9