我有一个dataframe,看起来像这样:
df = pd.DataFrame({'animals': [None, 'cat', 'dog', None, 'hippo', 'elephant']})
动物列有两个“无”值。
我想用一个值替换第一个缺失值,用另一个值替换第二个缺失值。
到目前为止,我的代码只替换了第一个缺失值。不更新第二个缺失值。
new_df = df.animals.fillna(pd.Series(['unknown1', 'unknown2'])
new_df
0 unknown1
1 cat
2 dog
3 NaN
4 hippo
5 elephant
Name: animals, dtype: object
我期望索引3的值等于unknown2。
我怎样才能让它工作,以便我可以用一个pandas序列的缺失值替换给定列中的缺失值,该序列的长度等于该列中缺失值的数量?
2条答案
按热度按时间xzv2uavs1#
将
fillna
与相同长度的系列一起使用:如何运作
当前方法的问题是
fillna
要么使用单个填充值,要么使用与要填充的列/DataFrame长度相同的Series。然后,它将从序列中获取第N个填充值,以填充列中第N个位置处的NaN。从文档:value : scalar, dict, Series, or DataFrame
用于填充孔的值(例如0),或者是一个dict/Series/DataFrame的值**,指定每个索引**(对于Series)或列(对于DataFrame)使用哪个值。
因此,我们通过创建一个具有类似值的临时序列来解决这个问题,该序列在正确的位置具有我们想要的填充值:
3pmvbmvn2#
我如何才能让它工作,以便我可以用一个pandas系列的缺失值替换给定列中的缺失值,其长度等于该列中缺失值的数量?
你可以简单地使用
loc
而不使用pd.Series
来避免索引对齐问题:输出:
您的代码只有在您对
Series
使用相同的索引时才能工作: