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

DataFrame.asof(where, subset=None)

返回前最后一行(S)没有任何NaN的地方。

不带任何NaN的最后一行(对于where,if list中的每个元素)。在a的情况下,DataFrame没有NaN的最后一行仅考虑列的子集(如果不是None)

版本0.19.0中的新功能:适用于DataFrame

如果没有好的值,则返回一个DataFrameSeries或一系列NaN值的NaN

参数

where : 日期或数组的日期

返回最后一行之前的日期。

subset : str或str-array,默认为None

对于DataFrame,如果不是None,

则仅使用这些列来检查NaN。

返回

scalar, Series, or DataFrame

scalar:当自我是一个Series而在哪里是一个标量

Series:当自为Series并且其中为阵列状时,

或当自是一个DataFrame,并在那里是scalar

DataFrame:当self是DataFrame时,where是类似数组的

例子,

Series和scalar作为where条件

>>> s = pd.Series([1, 2, np.nan, 4], index=[10, 20, 30, 40])
>>> s
10 1.0
20 2.0
30 NaN
40 4.0
dtype: float64
>>> s.asof(20)
2.0

对于一个Series,其中,将返回一个Series。第一个值是NaN,因为where的第一个元素在第一个索引值之前

>>> s.asof([5, 20])
5 NaN
20 2.0
dtype: float64

缺少值不予考虑。以下是2.0,而不是NaN,即使NaN位于索引位置30

>>> s.asof(30)
2.0

考虑所有列

>>> df = pd.DataFrame({'a': [10, 20, 30, 40, 50],
... 'b': [None, None, None, None, 500]},
... index=pd.DatetimeIndex(['2018-02-27 09:01:00',
... '2018-02-27 09:02:00',
... '2018-02-27 09:03:00',
... '2018-02-27 09:04:00',
... '2018-02-27 09:05:00']))
>>> df.asof(pd.DatetimeIndex(['2018-02-27 09:03:30',
... '2018-02-27 09:04:30']))
a b
2018-02-27 09:03:30 NaN NaN
2018-02-27 09:04:30 NaN NaN

考虑单个列

>>> df.asof(pd.DatetimeIndex(['2018-02-27 09:03:30',
... '2018-02-27 09:04:30']),
... subset=['a'])
a b
2018-02-27 09:03:30 30.0 NaN
2018-02-27 09:04:30 40.0 NaN