[英]pandas dataframe how to replace None values in a column with list values or remove none values or pd.np.nan
[英]Replace column values of sliced rows with None in Pandas Dataframe
我有以下 df:
colA colB colC
12 33 66
13 35 67
14 44 77
15 55 79
18 56 81
我想用 None 替換 colB 和 colC 的值,從索引 2 開始一直到 df 的末尾。 預期的 output 是:
colA colB colC
12 33 66
13 35 67
14 None None
15 None None
18 None None
將DataFrame.loc
與列表中的任何索引和列名稱一起使用:
df.loc[df.index[2:], ['colB','colC']] = None
如果有默認的RangeIndex
使用2:
:
df.loc[2:, ['colB','colC']] = None
print (df)
colA colB colC
0 12 33.0 66.0
1 13 35.0 67.0
2 14 NaN NaN
3 15 NaN NaN
4 18 NaN NaN
因為數值是None
轉換為NaN
的。
如果需要缺少值的整數,請使用Int64
:
df[['colB','colC']] = df[['colB','colC']].astype('Int64')
print (df)
colA colB colC
0 12 33 66
1 13 35 67
2 14 <NA> <NA>
3 15 <NA> <NA>
4 18 <NA> <NA>
你可以做這樣的事情 -
df.loc[2:, "colB":] = None
基本上使用 loc 方法來 select 從索引 2 開始的行和列 colB 和 colC,然后將值 None 分配給它們。 這將從索引 2 開始用 None 替換 colB 和 colC 的值。
除了pandas.DataFrame.loc
( jezrael 提到的)之外,還可以使用pandas.DataFrame.iloc
,如下所示
df.iloc[2:, 1:] = None
[Out]:
colA colB colC
0 12 33.0 66.0
1 13 35.0 67.0
2 14 NaN NaN
3 15 NaN NaN
4 18 NaN NaN
請注意, colB
和colC
是浮點數,因為NaN
是浮點數。 如果不希望這些列為float64
,一種方法是使用pandas.Int64Dtype
如下
df[['colB', 'colC']] = df[['colB', 'colC']].astype(pd.Int64Dtype())
[Out]:
colA colB colC
0 12 33 66
1 13 35 67
2 14 <NA> <NA>
3 15 <NA> <NA>
4 18 <NA> <NA>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.