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

时间:2017-10-15 23:09:13

标签: python pandas dataframe subtraction

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

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

执行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

我不关心"东西;"我想减去两列数据,并将其作为自己的列。因此,似乎很明显我应该删除我不感兴趣的行并使用剩余的行,所以我尝试了以下内容:

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,我也绝对对这些方法持开放态度。

1 个答案:

答案 0 :(得分:0)

问题在于指数的错误分配。

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

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

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