Often you will get an error IndexError: single positional indexer is out-of-bounds that is referencing a row that does not exist based on its index value.
When you want to look at a particular row in Python, there is a way that you can reference the row and then the values within it.
Lets break it down further to understand how the error occurs and why and how to fix it.
How the error occurs?
When we look at the below code, it throws out the error we are trying to fix.
Digging deeper lets look at the file we are importing, and the values contained within them. From the CSV file:
the above values are imported. If we were to create a matrix of its index values, it would be as follows:
As can be seen already, the index values range from zero to four in both row values and the column values are an index value of 1.
In the below code though we are trying to reference a row index value of five, but that does not exist, hence the error.
Note that using “iloc” allows you to return all the row values or a particular row and column value, we will demonstrate that in the next section.
import pandas as pd dataset = pd.read_csv('import_file.csv', sep = ',') df = pd.DataFrame(dataset, columns=['Name','Age']) a = df.iloc[5] #===>this allows you to print a particular row or value in that row print(df) Error: IndexError: single positional indexer is out-of-bounds
How to fix this error?
First off let’s just return the whole row say of index value two based on the below matrix:
This should return Jim and 23 in the output
import pandas as pd dataset = pd.read_csv('import_file.csv', sep = ',') df = pd.DataFrame(dataset, columns=['Name','Age']) a = df.iloc[2] #===>this allows you to print a particular row or value in that row print(df) print(a) Output: Name Age 0 Joe 21 1 John 22 2 Jim 23 3 Jane 24 4 Jennifer 25 Name Jim Age 23 Name: 2, dtype: object Process finished with exit code -1073741819 (0xC0000005)
We could also return either a name or age value as well, as long as they are within the range of values. This is achieved as follows:
Lets return just Jennifer’s age of 25 as follows:
import pandas as pd dataset = pd.read_csv('import_file.csv', sep = ',') df = pd.DataFrame(dataset, columns=['Name','Age']) a = df.iloc[4][1] #===>this allows you to print a particular row or value in that row print(df) print(a) Output: Name Age 0 Joe 21 1 John 22 2 Jim 23 3 Jane 24 4 Jennifer 25 25 Process finished with exit code -1073741819 (0xC0000005)
So in summary:
(A) When you are looking to retrieve particular values in a row, you need to make sure you have a valid range of index values.
(B) Using “iloc” is a handy way to retrieve any value you want, but make sure you reference the correct index values.