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

为何Pandas中两个DataFrame相减得到含NaN的两列结果?

问题原因

Pandas的DataFrame执行算术运算(如-)时,会同时按列名和索引进行对齐匹配。你的x1列名为Test,x2列名为Test2,二者没有重叠的列名,运算时找不到可对应计算的列,因此结果中所有位置都会返回NaN。

解决方法

有几种实用的处理方式:

  • 统一两个DataFrame的列名
    将x2的列名修改为与x1一致,让列名匹配后再运算:

    import pandas as pd
    import numpy as np
    
    x1 = pd.DataFrame(np.random.randn(100), columns=['Test'], index=pd.date_range(start='1/1/2018', periods=100))
    x2 = pd.DataFrame(np.random.randn(100), columns=['Test'], index=pd.date_range(start='1/1/2018', periods=100))
    
    z = x1 - x2
    
  • 直接提取数值数组计算
    若确认两个DataFrame的索引完全对齐,可跳过列名匹配,直接用底层数值数组运算:

    # 方式1:直接用values运算
    z = x1 - x2.values
    # 方式2:单独提取列数值后构建新DataFrame
    z = pd.DataFrame(x1['Test'].values - x2['Test2'].values, index=x1.index, columns=['Diff'])
    
  • 使用sub方法指定对齐轴
    通过axis参数强制按索引(行)对齐,忽略列名差异:

    z = x1.sub(x2, axis=0)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 03:32:06