Pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。本文主要介绍一下Pandas中pandas.DataFrame.pct_change方法的使用。

DataFrame.pct_change(self: ~FrameOrSeries, periods=1, fill_method='pad', limit=None, freq=None, **kwargs) → ~FrameOrSeries     [source]

当前元素与先前元素之间的百分比变化。

默认情况下,计算与前一行的百分比变化。这在比较元素时间序列中的变化百分比时很有用。

参数

periods :int, 默认为 1

形成百分比变化所需的时间。

fill_method :str, 默认为‘pad’

如何在计算百分比更改之前处理NAs

limit :int, 默认为 None

停止前要填充的连续NAs的数量。

freq DateOffset, timedelta, 或 str(可选)

时间序列API开始使用的增量(例如,"M"BDay())。

**kwargs

其他关键字参数将传递到 DataFrame.shiftSeries.shift中。

返回值

chg :SeriesDataFrame

与调用对象的类型相同。

例子

Series

>>> s = pd.Series([90, 91, 85])
>>> s
0    90
1    91
2    85
dtype: int64
>>> s.pct_change() 0 NaN 1 0.011111 2 -0.065934 dtype: float64
>>> s.pct_change(periods=2) 0 NaN 1 NaN 2 -0.055556 dtype: float64

看到Series中的百分比变化,其中用最后一个有效观察值填充到下一个有效观察值来填充NA

>>> s = pd.Series([90, 91, None, 85])
>>> s
0    90.0
1    91.0
2     NaN
3    85.0
dtype: float64
>>> s.pct_change(fill_method='ffill') 0 NaN 1 0.011111 2 0.000000 3 -0.065934 dtype: float64

DataFrame

从1980-01-01到1980-03-01的法郎,德国马克和意大利里拉的百分比变化

>>> df = pd.DataFrame({
...     'FR': [4.0405, 4.0963, 4.3149],
...     'GR': [1.7246, 1.7482, 1.8519],
...     'IT': [804.74, 810.01, 860.13]},
...     index=['1980-01-01', '1980-02-01', '1980-03-01'])
>>> df
                FR      GR      IT
1980-01-01  4.0405  1.7246  804.74
1980-02-01  4.0963  1.7482  810.01
1980-03-01  4.3149  1.8519  860.13

>>> df.pct_change()
                  FR        GR        IT
1980-01-01       NaN       NaN       NaN
1980-02-01  0.013810  0.013684  0.006549
1980-03-01  0.053365  0.059318  0.061876

GOOG和APPL库存量变化的百分比。显示计算列之间的百分比变化

>>> df = pd.DataFrame({
...     '2016': [1769950, 30586265],
...     '2015': [1500923, 40912316],
...     '2014': [1371819, 41403351]},
...     index=['GOOG', 'APPL'])
>>> df
          2016      2015      2014
GOOG   1769950   1500923   1371819
APPL  30586265  40912316  41403351

>>> df.pct_change(axis='columns')
      2016      2015      2014
GOOG   NaN -0.151997 -0.086016
APPL   NaN  0.337604  0.012002