繁体   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