现值减去前值(python)

时间:2018-08-20 11:51:53

标签: python excel pandas

我想用每行中的前一个值减去当前值,并且每当不存在N / A时,它将复制前一个可用值,并减去前一个可用值。

当我运行以下代码时,收到以下消息:'DataFrame'对象没有属性'value'。有人可以帮忙解决它吗?

import pandas as pd

from pandas import ExcelWriter

from pandas import ExcelFile

df = pd.read_excel('ccy_test.xlsx')

X = df.iloc[3:, 1:]

df.fillna(method='pad')

count_row = df.shape[0]

count_col = df.shape[1]

z = df.value[:count_row,1:count_col] - df.value[:count_row,:count_col-1]

dz = pd.DataFrame(z)

Sample File

2 个答案:

答案 0 :(得分:1)

df.fillna(method='pad')默认情况下不会更改您的数据框,您需要使用df = df.fillna(method='pad')重新定义它。

答案 1 :(得分:1)

您发布的代码存在一些问题。该示例文件是csv文件,因此您需要引用“ ccy_test.csv”。列Value仅包含0,因此在此示例中,我使用列Open

此外,我已添加到您的read_csv

  1. index_col=0->使第一列dates成为索引
  2. parse_dates=[0]->将日期解析为日期(而不是字符串)
  3. skiprows=3->不读取第一行,因为它们不属于表
  4. header=0->读取第一行(跳过之后)作为列名

所以:

import pandas as pd

df = pd.read_csv('ccy_test.csv', index_col=0, parse_dates=[0], skiprows=3, header=0)

df = df.fillna(method='pad')

df['Difference'] = df.Open.diff()

print(df)

输出:

                        Open     High      Low  Value  Volume  Difference
Dates                                                                    
2018-03-01 09:30:00  0.83064  0.83121  0.83064    0.0     0.0         NaN
2018-03-01 09:31:00  0.83121  0.83128  0.83114    0.0     0.0     0.00057
2018-03-01 09:32:00  0.83128  0.83161  0.83126    0.0     0.0     0.00007
2018-03-01 09:33:00  0.83161  0.83169  0.83161    0.0     0.0     0.00033
2018-03-01 09:34:00  0.83169  0.83169  0.83145    0.0     0.0     0.00008