如何忽略NA值校验dataframe两列的所有非NA元素是否完全一致
校验两列非NA值一致性的实现方法
我们可以先过滤掉date 2列为空的行,再对比两列的内容是否完全匹配,以下是两种常用技术栈的实现:
Python(Pandas环境)
如果你用的是Pandas,可以用equals方法实现类似identical的校验逻辑,会同时校验数据类型和数值:
# 方法1:严谨校验,和你之前用的identical逻辑一致 校验结果 = df.loc[df['date 2'].notna(), ['date 1']].equals(df.loc[df['date 2'].notna(), ['date 2']]) # 方法2:直接对比数值,返回True即代表所有非NA行匹配 校验结果 = (df.dropna(subset=['date 2'])['date 1'] == df.dropna(subset=['date 2'])['date 2']).all()
如果返回结果为True,你可以直接删除冗余的date 2列:df = df.drop('date 2', axis=1)
R环境
你之前用的identical是R的原生函数,适配需求的写法如下:
# 基础写法 校验结果 <- identical(df[!is.na(df$`date 2`), 'date 1'], df[!is.na(df$`date 2`), 'date 2']) # dplyr风格写法 library(dplyr) 校验结果 <- df %>% filter(!is.na(`date 2`)) %>% summarise(matched = identical(`date 1`, `date 2`)) %>% pull(matched)
如果返回结果为True,删除date 2列的语句为:
df$date 2 <- NULL
注意:校验前建议先统一两列的日期格式,比如都转换为Date类型,避免因字符串格式不一致(如1/1/21和01/01/2021)导致误判。
内容的提问来源于stack exchange,提问作者Melderon
相关产品推荐
相关产品推荐

