如何用等长Series填充Pandas DataFrame列中的对应缺失值?
解决Pandas按顺序填充对应缺失值的问题
你当前代码只替换了第一个缺失值,原因是fillna会按索引匹配填充:你创建的pd.Series(['unknown1', 'unknown2'])默认索引是[0,1],但DataFrame中缺失值的索引是0和3,只有索引0能匹配,所以第二个缺失值没被更新。
下面是两种可行的解决方法:
方法一:匹配缺失值索引创建填充Series
先定位所有缺失值的索引,再用这些索引生成填充用的Series,确保索引完全对应:
import pandas as pd df = pd.DataFrame({'animals': [None, 'cat', 'dog', None, 'hippo', 'elephant']}) # 获取缺失值的索引列表 na_indices = df[df['animals'].isna()].index # 用缺失值索引创建填充Series fill_series = pd.Series(['unknown1', 'unknown2'], index=na_indices) # 执行填充 new_df = df['animals'].fillna(fill_series)
运行后new_df的结果:
0 unknown1 1 cat 2 dog 3 unknown2 4 hippo 5 elephant Name: animals, dtype: object
方法二:直接通过掩码定位赋值
用布尔掩码找到缺失值位置,直接按顺序赋值,逻辑更直观:
import pandas as pd df = pd.DataFrame({'animals': [None, 'cat', 'dog', None, 'hippo', 'elephant']}) # 生成缺失值的布尔掩码 na_mask = df['animals'].isna() # 给掩码对应的位置按顺序填充指定值 df.loc[na_mask, 'animals'] = ['unknown1', 'unknown2']
此方法会直接修改原DataFrame,最终df['animals']的结果和方法一一致。
内容的提问来源于stack exchange,提问作者user2926337
相关产品推荐
相关产品推荐

