熊猫pct改变不切实际的价值观



我执行以下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的情况下预期的。

最新更新