[英]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.