**Pandas**

*chevron_left*

**Time Series**

# Pandas DataFrame | asof method

*schedule*Aug 10, 2023

*toc*Table of Contents

*expand_more*

**mathematics behind data science**with 100+ top-tier guides

Start your free 7-days trial now!

Pandas `DataFrame.asof(~)`

method returns the last row that contains no `NaN`

.

# Parameters

1. `where`

link | `date`

or `array-like`

of `dates`

The values of the index you want to check until. Typically, this would be a list of dates. Check the examples below for clarification.

2. `subset`

| `string`

or `array-like`

of `string`

| `optional`

The label of the columns to consider when checking for `NaN`

. By default, all columns are considered.

# Return Value

If `where`

is a scalar, then a `Series`

is returned. Otherwise, a `DataFrame`

is returned.

The index of the source DataFrame must be sorted, otherwise an error is raised.

# Examples

## Basic usage

Consider the following DataFrame:

```
df = pd.DataFrame({"A":[3,4,pd.np.NaN,2], "B":[5,6,7,8]}, index=[10,20,30,40])df
A B10 3.0 520 4.0 630 NaN 740 2.0 8
```

Notice how the index of the DataFrame is sorted. This is a prerequisite for using this method.

To get the last row without `NaN`

before index value `35`

(inclusive):

```
df.asof(35)
A 4.0B 6.0Name: 35, dtype: float64
```

Here, we obtain the 2nd row (row with index `20`

). The 4th row, which has an index value of `40`

, was ignored since it exceeds the specified index value of `35`

.

## Dates as index

Consider the following DataFrame with a `DatetimeIndex`

:

```
my_index = pd.DatetimeIndex(["2020-12-24", "2020-12-25", "2020-12-26", "2020-12-27"])df = pd.DataFrame({"A":[3,4,pd.np.NaN,2], "B":[5,6,7,8]}, index=my_index)df
A B2020-12-24 3.0 52020-12-25 4.0 62020-12-26 NaN 72020-12-27 2.0 8
```

Here, the index values are dates, which again, are sorted.

To get the last rows without `NaN`

before two specific dates (inclusive):

```
my_where = pd.DatetimeIndex(["2020-12-24", "2020-12-26"])df.asof(my_where)
A B2020-12-24 3.0 5.02020-12-26 4.0 6.0
```

Note the following:

the row values of

`2020-12-25`

are returned for the second row. This is because the row values of`2020-12-26`

contain a`NaN`

, and so the next candidate is the row values of`2020-12-25`

, which do not contain any`NaN`

.the new index values of the returned DataFrame are the ones you've specified in the parameter.