我执行以下python代码:
data_extracted = data_extracted.interpolate(method='linear',
axis=0).ffill().bfill()
data_extracted = data_extracted.replace([np.inf, -np.inf], np.nan).fillna(0)
data_pct_change = data_extracted.pct_change(axis=0).replace([np.inf, -np.inf],
np.nan)
data_pct_change = data_pct_change.fillna(0)
print(data_pct_change)
这是输入(例如data_extracted(:
ARTICLE_NUMBER 400115897090 500109158982
DATE
2016-01-18 NaN NaN
2016-02-01 5914.0 8776.0
2016-02-15 NaN NaN
2016-02-29 NaN 4402.0
2016-03-14 6214.0 6880.0
2016-04-04 6766.0 7942.0
2016-04-11 6454.0 7528.0
2016-04-25 6070.0 7534.0
2016-05-16 6778.0 7066.0
2016-05-30 6856.0 NaN
2016-06-20 7132.0 7138.0
2016-06-27 7384.0 7426.0
2016-07-18 8830.0 8614.0
2016-08-01 9448.0 9166.0
2016-08-15 8824.0 9676.0
2016-08-22 8500.0 8974.0
2016-09-12 6226.0 6868.0
2016-10-03 6754.0 7426.0
2016-11-07 NaN 8296.0
2016-11-14 7858.0 8116.0
2016-11-21 8212.0 9070.0
2016-12-05 NaN NaN
2016-12-19 9428.0 8284.0
然后执行上面的代码,我得到以下结果:
ARTICLE_NUMBER 400115897090 500109158982
DATE
2016-01-18 0.000000 0.000000
2016-02-01 0.000000 0.000000
2016-02-15 0.000000 0.000000
2016-02-29 0.000000 0.000000
2016-03-14 0.000000 0.000000
2016-04-04 0.000000 0.000000
2016-04-11 0.000000 0.000000
2016-04-25 0.000000 0.000000
2016-05-16 0.000000 0.000000
2016-05-30 0.000000 0.000000
2016-06-20 0.000000 0.000000
2016-06-27 0.000000 0.000000
2016-07-18 0.000000 0.000000
2016-08-01 0.000000 0.000000
2016-08-15 0.000000 0.000000
2016-08-22 13.384615 252.600000
2016-09-12 -0.221925 0.807571
2016-10-03 0.407216 0.172339
2016-11-07 -0.104396 -0.109044
2016-11-14 0.053170 0.299499
2016-11-21 -0.029773 -0.020572
2016-12-05 0.111074 -0.798490
2016-12-19 0.099970 4.998371
为什么我得到这样错误的结果?我知道浮点精度,但这真的很奇怪。例如:2016-08-22:从9676增长到8974,增长252%。这绝对是错误的,就像0亿美元一样有人能解释一下为什么吗?这是0.22.0版本的带有pandas的Python 3。非常感谢
您可以使用pandas
中的shift
函数将其转换为矢量化操作。首先要做的是确保DATE
是您的索引。如果您已经将DATE
设置为索引,则可以跳过此设置。
data_extracted.set_index("DATE", inplace=True)
接下来,您可以制作一个新的DataFrame,将所有行下移一行。
shifted = data_extracted.shift(1)
现在你可以用这两个数据帧做一个简单的pct变化计算:
pct_change = (data_extracted - shifted) / shifted
如果任一DataFrame中的一行存在NaN
值,则结果将是pct_change
中的NaN
。您问题中"2016-08-22"示例的值为-0.07,这是在给定值9676和8974的情况下预期的。