如何用 pandas 减去两个部分列?

How to subtract two partial columns with pandas?

我刚刚开始使用 Pandas,所以我可能遗漏了一些重要的东西,但我似乎无法成功地减去我正在使用的两列。我在 excel 中有一个电子表格,我按如下方式导入:

df = pd.read_excel('/path/to/file.xlsx',sheetname='Sheet1')

我的 table 在执行 df.head() 时看起来类似于以下内容:

      a         b        c        d
0     stuff     stuff    stuff    stuff
1     stuff     stuff    stuff    stuff
2     data      data     data     data
...   ...       ...      ...      ...
89    data      data     data     data

我不关心 "stuff;" 我想减去两列数据并将其作为自己的列。因此,很明显我应该 trim 关闭我不感兴趣的行并处理剩下的行,所以我尝试了以下操作:

dataCol1 = df.ix[2:,0:1]
dataCol2 = df.ix[2:,1:2]
print(dataCol1.sub(dataCol2,axis=0))

但结果是

             a          b
2           NaN        NaN
3           NaN        NaN
4           NaN        NaN
...         ...        ...
89          NaN        NaN

如果我也简单地尝试 print(dataCol1-dataCol2),我会得到相同的结果。我真的不明白这两个减法运算如何不仅导致所有 NaN,而且还产生两列而不是只有一列的最终结果。因为当我 print(dataCol1) 时,我确实获得了我想要使用的列:

      a      
2     data     
3     data   
4     data     
...   ...
89    data      

有没有什么方法既可以简单直接地从 Excel 电子表格工作,又可以对所述电子表格的列的截断部分执行基本操作?也许有比使用 df.ix 更好的方法来解决这个问题,我也绝对愿意接受这些方法。

问题是您的索引未对齐。

要做的一件事是减去值,这样您就不必处理对齐问题:

dataCol1 = df.iloc[2: , 0:1]   # ix is deprecated
dataCol2 = df.iloc[2: , 1:2]

result = pd.DataFrame(dataCol1.values - dataCol2.values)