簡體   English   中英

將切片行的列值替換為 None in Pandas Dataframe

[英]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.locjezrael 提到的)之外,還可以使用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

請注意, colBcolC是浮點數,因為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM