【问题标题】:How to subtract two partial columns with pandas?如何用熊猫减去两个部分列?
【发布时间】:2017-10-15 23:09:12
【问题描述】:

我刚刚开始使用 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 更好的方法来解决这个问题,我也绝对对这些方法持开放态度。

【问题讨论】:

    标签: python pandas dataframe subtraction


    【解决方案1】:

    问题是您的索引错位。

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

    dataCol1 = df.iloc[2: , 0:1]   # ix is deprecated
    dataCol2 = df.iloc[2: , 1:2]
    
    result = pd.DataFrame(dataCol1.values - dataCol2.values)
    

    【讨论】:

    • 谢谢!为什么ix 被弃用了?
    • @Oak ix 对您的数据进行了一些假设,并且更加不稳定。他们决定将其功能拆分为lociloc。更新您的熊猫并检查一下。
    猜你喜欢
    • 1970-01-01
    • 2020-10-08
    • 2018-03-07
    • 2016-10-16
    • 2021-10-22
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    相关资源
    最近更新 更多