You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python执行减法运算时出现大量NaN值的解决方法

问题原因与解决方法

导致X3出现大量NaN的核心原因有3个:

  • X1、X2的Mar列本身存在缺失值,参与计算时会传播为NaN
  • 两个数据集筛选1984-2020年之后索引未对齐,Series按索引匹配运算时不匹配的位置会生成NaN
  • 原代码中用pd.DataFrame()二次构造数据时,如果原csv列名不匹配,会生成空列导致后续取值为NaN

具体修复步骤

  1. 优化数据读取逻辑,避免构造空列
    读文件时直接用usecols指定需要的列,不需要二次构造DataFrame,同时重置索引保证两个数据集行严格按年份对齐:
import pandas as pd
from sklearn import linear_model
import numpy as np

# 读取X1
X1 = pd.read_csv(r'file\X1.csv', usecols=['Year','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])
X1 = X1[X1['Year'].between(1984,2020, inclusive="both")].reset_index(drop=True)
# 读取X2
X2 = pd.read_csv(r'file\X2.csv', usecols=['Year','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'])
X2 = X2[X2['Year'].between(1984,2020, inclusive="both")].reset_index(drop=True)
  1. 清洗缺失值,对齐两个序列
    提取Mar列后合并检查,统一删除存在缺失的行:
# 提取3月数据并合并去空
mar_data = pd.concat([X1['Mar'], X2['Mar']], axis=1, keys=['X1_mar', 'X2_mar']).dropna()
X1_mar = mar_data['X1_mar']
X2_mar = mar_data['X2_mar']
  1. 执行回归与去趋势计算
regr = linear_model.LinearRegression()
regr.fit(X1_mar.values.reshape(-1,1), X2_mar)
# 计算趋势线,coef_取第一个元素避免数组广播问题
trend = regr.coef_[0] * X1_mar + regr.intercept_
X3 = X2_mar - trend
# 可选:如果仍有少量空值可删除或填充
# X3 = X3.dropna()
# X3 = X3.fillna(X3.mean())
print(X3)

内容的提问来源于stack exchange,提问作者user2543

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:00:01