从DataFrame中删除列的第一行N.

van*_*lay 0 python numpy dataframe pandas

如果我有一个长度为3的DataFrame,有3列

a b c
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)

有没有一种聪明的方法b用NaN 替换前两行的色谱柱?

cs9*_*s95 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
Run Code Online (Sandbox Code Playgroud)

如果你df.index不是单调递增的整数索引,那么你可以df.indexnp.arange(len(df))- 替换-

df.b.mask(np.arange(len(df)) < 2)

0    NaN
1    NaN
2    8.0
Name: b, dtype: float64
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)