我执行以下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)
这是输入(数据提取,示例):
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增加到9742,增长了252%。这绝对是错误的,同时还有0.000000 谁能解释我为什么?这是Python 3,带有版本为2.02.0的pandas。 非常感谢
答案 0 :(得分:1)
您可以利用shift
中的pandas
函数将其转换为矢量化操作。首先要做的是确保DATE
是您的索引。如果您已经将DATE
设置为索引,则可以跳过此设置。
data_extracted.set_index("DATE", inplace=True)
接下来,您可以制作一个新的DataFrame,将所有行向下移动一位。
shifted = data_extracted.shift(1)
现在您可以使用以下两个DataFrame进行简单的pct更改计算:
pct_change = (data_extracted - shifted) / shifted
如果任一DataFrame中的行存在NaN
值,则结果将是NaN
中的pct_change
。您问题中“ 2016-08-22”示例的值是-0.07,在给定值9676和8974的情况下应该是预期值。