**Pandas First_Valid_Index**

** **The pandas.Series.first_valid_index() function returns the index of the first non-NA value. If the Series holds all the null values or if it is empty, “None” is returned.

**Syntax:**

Let’s see the syntax of this function. It doesn’t take any parameters:

The pandas.DataFrame.first_valid_index() function returns the index of the first non-NA value that is present in the row. If the DataFrame holds all null values or if it is empty, “None” is returned.

**Syntax:**

Let’s see the syntax of this function. It doesn’t take any parameters:

**Example 1: Series with Some Missing Values**

Create the “departments” Series with 10 strings that include the missing values. Use the pandas.Series.first_valid_index() function to get the first not-null value from the previous Series.

# Create Series with 10 strings that include Missing values

departments=pandas.Series([None,None,'Computer','Mechanical','Auto-Mobile',None,'Civil','Electronics','Bio-tech',None])

print(departments,'\n')

# Series.first_valid_index()

print(departments.first_valid_index(),'\n')

**Output:**

“Computer” is the first not-null value that is present in the Series. Its index is 2.

**Example 2: Series with All Missing Values**

Create the “departments” Series with five missing values. Use the function and try to return the index of the first not-null value from the departments.

# Create Series with 5 strings with all Missing values

departments=pandas.Series([None,None,None,None,None])

print(departments,'\n')

# Series.first_valid_index()

print(departments.first_valid_index(),'\n')

**Output:**

All are missing values in the previous “departments” Series. So, the result is “None”.

**Example 3: DataFrame with Some Missing Values**

Create the “departments” DataFrame with five rows and two columns. Return the first valid index of the DataFrame using the pandas.DataFrame.first_valid_index() function.

# Create DataFrame with some missing values

departments=pandas.DataFrame([[120,None],[None,'Chemical'],[100,None],[100,'Computers'],[None,'Biotech']],

columns=['Department_id','Department_name'])

print(departments,"\n")

# DataFrame.first_valid_index()

print(departments.first_valid_index())

**Output:**

The Department_id (120.0) under the first row is not-null. So, it’s index is returned.

**Example 4: DataFrame with All Missing Values**

Create the “departments” DataFrame with two columns with all missing values. Try to return the first valid index of the DataFrame using the pandas.DataFrame.first_valid_index() function.

# Create DataFrame with all missing values

departments=pandas.DataFrame([[None,None],[None,None]],

columns=['Department_id','Department_name'])

print(departments,"\n")

# DataFrame.first_valid_index()

print(departments.first_valid_index(),'\n')

**Output:**

The result is “None” since the entire DataFrame is “None”.

**Pandas Last_Valid_Index**

The pandas.Series.last_valid_index() function returns the index of the last non-NA value. If the Series holds all the null values or if it is empty, “None” is returned.

**Syntax:**** **

Let’s see the syntax of this function. It doesn’t take any parameters:

The pandas.DataFrame.last_valid_index() function returns the index of the last non-NA value that is present in the row. If the DataFrame holds all the null values or if it is empty, “None” is returned.

**Syntax:**** **

Let’s see the syntax of this function. It doesn’t take any parameters:

**Example 1: Series with Some Missing Values**

Create the “departments” Series with 10 strings that include the missing values. Use the function and return the index of the last not-null value using the pandas.Series.last_valid_index() function.

# Create Series with 10 strings that include Missing values

departments=pandas.Series([None,None,'Computer','Mechanical','Auto-Mobile',None,'Civil','Electronics','Bio-tech',None])

print(departments,'\n')

# Series.last_valid_index()

print(departments.last_valid_index(),'\n')

**Output:**

“Bio-tech” is the last not-null value that is present in the Series. Its index is 8.

**Example 2: Series with All Missing values**

Create the “departments” Series with five missing values. Use the function and try to return the index of the last not-null value.

# Create Series with 5 strings with all Missing values

departments=pandas.Series([None,None,None,None,None])

print(departments,'\n')

# Series.last_valid_index()

print(departments.last_valid_index(),'\n')

**Output:**

All are missing values in the previous “departments” Series. So, the result is “None”.

**Example 3: DataFrame with Some Missing Values**

Create the “departments” DataFrame with five rows and two columns. Return the last valid index of the DataFrame using the pandas.DataFrame.last_valid_index() function.

# Create DataFrame with some missing values

departments=pandas.DataFrame([[120,None],[None,'Chemical'],[100,None],[100,'Computers'],[None,'Biotech']],

columns=['Department_id','Department_name'])

print(departments,"\n")

# DataFrame.last_valid_index()

print(departments.last_valid_index())

**Output:**

The Department_name (“Biotech”) under the last row is not-null. So, its index is returned.

**Example 4: DataFrame with All Missing values**

Create the “departments” DataFrame with two columns with all missing values. Try to return the last valid index of the DataFrame using the pandas.DataFrame.last_valid_index() function.

# Create DataFrame with all missing values

departments=pandas.DataFrame([[None,None],[None,None]],

columns=['Department_id','Department_name'])

print(departments,"\n")

# DataFrame.last_valid_index()

print(departments.last_valid_index())

**Output:**

The result is “None” since the entire DataFrame is “None”.

**Bonus Example: **

Let’s return the first and last valid indices in specific columns of the DataFrame.

departments=pandas.DataFrame([[120,None],[None,'Chemical'],[100,None],[100,'Computers'],[567,None]],

columns=['Department_id','Department_name'])

print(departments,"\n")

print(departments['Department_name'].last_valid_index())

print(departments['Department_name'].first_valid_index())

print(departments['Department_id'].last_valid_index())

print(departments['Department_id'].first_valid_index())

** ****Output:**

- The last not-null value in the Department_name column is “Computers”. So, its index which is 3 is returned.
- The first not-null value in the Department_name column is “Chemical”. So, its index which is 1 is returned.
- The last not-null value in the Department_id column is 567.0. So, its index which is 4 is returned.
- The first not-null value in the Department_id column is 120.0. So, its index which is 0 is returned.

**Conclusion**

We learned how to find the first and last non-null elements in the Series and DataFrame separately with examples using the first_valid_index and last_valid_index functions. Also, we provided an example for Series and DataFrame having all missing values in them. As a bonus, we provided one example that returns the first and last valid indices from a specific column in the DataFrame.