使用Pandas查找DataFrame最接近值对应行异常,求问题排查
问题原因及解决方案
问题出在你的DataFrame第0行的P列值是NaN,且代码未排除这些无效行。虽然理论上NaN在计算差异绝对值后仍为NaN,argsort()会将其排在排序结果末尾,但实际执行中(可能受pandas版本或数据类型影响),未过滤的NaN会干扰排序逻辑,导致错误返回差异最大的第12行。
更关键的是,你的需求是匹配P列的有效数值,因此必须先过滤掉P为NaN的行,再进行计算。
修正后的代码方案
方案1:过滤NaN后使用argsort
p = 0.2020202 # 过滤掉P列的NaN行 filtered_df = df.dropna(subset=['P']) # 找到最接近的行 closest_p = filtered_df.iloc[(filtered_df['P'] - p).abs().argsort()[:1]]
方案2:使用idxmin更简洁高效
p = 0.2020202 # 过滤NaN行 filtered_df = df.dropna(subset=['P']) # 获取差异最小的行的索引 closest_idx = (filtered_df['P'] - p).abs().idxmin() # 提取对应行 closest_p = df.loc[closest_idx]
两种方法都能正确返回原DataFrame的第2行(P=0.2),因为这一行与p=0.2020202的差异最小(仅0.0020202)。
内容的提问来源于stack exchange,提问作者travgeol
相关产品推荐
相关产品推荐

