Skip to main content
 首页 » 编程设计

python之有没有办法在多个列中填充缺失值,这些列中的部分名称与另一列中的值共享

2025年05月04日16lyj

我正在尝试将 NaN 填充到多个列中(对于解决方案来说太多了,无法硬编码),这些列的名称的一部分与同一 pandas 数据框中另一列的值共享。

我知道我可以使用常量值填充多列,也可以使用同一数据框中的另一列填充单个列。这两者的结合对我不起作用。

例如,考虑数据框:

df = pd.DataFrame({'Val': [1.2,5.4,3.1,4], 'Col - 1': [None,5,1,None], 'Col - 2': [None,None,6,None]}) 
print(df) 
 
   Val  Col - 1  Col - 2 
0  1.2      NaN      NaN 
1  5.4      5.0      NaN 
2  3.1      1.0      6.0 
3  4.0      NaN      NaN 

用常量值填充多个列是可行的:

df.loc[:,df.columns.str.contains('Col')] = df.loc[:,df.columns.str.contains('Col')].fillna(value=15) 
print(df) 
 
   Val  Col - 1  Col - 2 
0  1.2     15.0     15.0 
1  5.4      5.0     15.0 
2  3.1      1.0      6.0 
3  4.0     15.0     15.0 

用另一列的值填充单个列也可以:

df['Col - 2'] = df['Col - 2'].fillna(value=df['Val']) 
print(df) 
 
   Val  Col - 1  Col - 2 
0  1.2      NaN      1.2 
1  5.4      5.0      5.4 
2  3.1      1.0      6.0 
3  4.0      NaN      4.0 

两者的结合是行不通的:

df.loc[:,df.columns.str.contains('Col')] = df.loc[:,df.columns.str.contains('Col')].fillna(value=df['Val']) 

上面什么都不做,返回原始数据框。我期待的是:

   Val  Col - 1  Col - 2 
0  1.2      1.2      1.2 
1  5.4      5.0      5.4 
2  3.1      1.0      6.0 
3  4.0      4.0      4.0 

请您参考如下方法:

你应该添加 apply lambda ,因为数据框 fillna 也会检查 columns name ,你填写它通过 pd.Series,它与 columns 不匹配,所以会导致 fillna 失败

df.loc[:,df.columns.str.contains('Col')].apply(lambda x : x.fillna(value=df['Val']))