如何用另一列值替换DataFrame某列中的空值/NaN?
问题原因
df['Date'].replace(np.nan, df['Date2']) 无法生效的核心问题在于:replace 方法的参数逻辑是值映射替换——当你传入df['Date2']作为替换值时,它只会取这个Series的第一个元素,把所有NaN都替换成同一个值,而不是按行对应填充缺失的位置。
解决方法
以下是三种可靠的逐行替换缺失值的方式:
- 方法一:使用
fillna(推荐,最直观)fillna原生支持传入Series,按行匹配填充缺失值:
import pandas as pd import numpy as np df['Date'] = df['Date'].fillna(df['Date2'])
- 方法二:使用
combine_first
该方法会用右侧列的值填充左侧列的缺失值,同时保留左侧列的非缺失数据:
df['Date'] = df['Date'].combine_first(df['Date2'])
- 方法三:使用
where条件判断
通过布尔索引控制,仅当Date列存在缺失时,用Date2对应行的值替换:
df['Date'] = df['Date'].where(df['Date'].notna(), df['Date2'])
测试示例
构造测试数据验证效果:
# 创建测试DataFrame df = pd.DataFrame({ 'Date': ['2023-01-01', np.nan, '2023-01-03', np.nan], 'Date2': ['2023-02-01', '2023-02-02', '2023-02-03', '2023-02-04'] }) # 应用fillna替换 df['Date'] = df['Date'].fillna(df['Date2']) print(df)
输出结果:
Date Date2 0 2023-01-01 2023-02-01 1 2023-02-02 2023-02-02 2 2023-01-03 2023-02-03 3 2023-02-04 2023-02-04
内容的提问来源于stack exchange,提问作者Samir112
相关产品推荐
相关产品推荐

