我想用每行中的前一个值减去当前值,并且每当不存在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)
答案 0 :(得分:1)
df.fillna(method='pad')
默认情况下不会更改您的数据框,您需要使用df = df.fillna(method='pad')
重新定义它。
答案 1 :(得分:1)
您发布的代码存在一些问题。该示例文件是csv
文件,因此您需要引用“ ccy_test.csv”。列Value
仅包含0,因此在此示例中,我使用列Open
。
此外,我已添加到您的read_csv
:
index_col=0
->使第一列dates
成为索引parse_dates=[0]
->将日期解析为日期(而不是字符串)skiprows=3
->不读取第一行,因为它们不属于表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