MEHMET BALIOGLU

If using all scalar values you must pass an index

The Problem:

When you try to create a pandas dataframe using only scalar values without passing an index, you will get a ValueError: If using all scalar values, you must pass an index. In this article, I will provide an explanation of the problem and three easy and different solutions.

First, let’s understand the root cause of this error : “If using all scalar values, you must pass an index“. We can more or less understand that we need to create an index, but what is a scalar value anyway? Let me explain: there are arrays and scalars in Python and, to put it simply, a scalar is one of the things you put in an array.  In other words, a scalar is a “single” value. It may be an integer, a boolean (True, False) or a string.

THESE ARE SCALARS:

a = 1

b= True

c= “why not”

AND THIS IS AN ARRAY:

an_array = [1 ,True,”hi”]

If you are trying to create a Pandas dataframe using only scalar values, then Python interpreter will tell you this: If using all scalar values, you must pass an index!

Example:

df_oh_my = pd.DataFrame({
    'col_1' : 1,
    'col_2' : True,
    'col_3' : 'why not'
    }
    ) 
print(df_oh_my)

#print DataFrame

ValueError: If using all scalar values, you must pass an index

In order to solve ValueError: If using all scalar values, you must pass an index, we have at least 3 options:

Solution 1: If using all scalar values you must pass an index

If you want to convert a dictionary of scalars without getting a ValueError, you have to pass an index. It is simple:

df_oh_my = pd.DataFrame({
    'col_1' : 1,
    'col_2' : True,
    'col_3' : 'why not'
    },
index=[0]
    ) 
print(df_oh_my)

#print DataFrame
    col_1  col_2    col_3
0       1   True  why not

It doesn’t have to be index=[0]. You can name it whatever you want, for example: index=[1] , index=[“x”]. But if you use multiple values, the dataframe row is going to be duplicated:

df_oh_my = pd.DataFrame({
    'col_1' : 1,
    'col_2' : True,
    'col_3' : 'why not'
    },
index=[0,1,2]
    ) 
print(df_oh_my)

#print DataFrame

    col_1  col_2    col_3
0       1   True  why not
1       1   True  why not
2       1   True  why not

Solution 2: Wrap your dictionary into a list:

By wrapping your dictionary into a list, you can get rid of the ValueError: If using all scalar values, you must pass an index. In order to do this, just use square brackets [ ] .

df_oh_my = pd.DataFrame([{
    'col_1' : 1,
    'col_2' : True,
    'col_3' : 'why not'
    }]
    ) 
print(df_oh_my)

Solution 3: Convert your dictionary to Series and transpose

#dict is a dictionary
dict= {
    'col_1' : 1,
    'col_2' : True,
    'col_3' : 'why not'
    }
  
# first convert to series by using pd.Series
# secondly, convert to dataframe
# thirdly, transpose using T 
df_oh_my = pd.DataFrame(pd.Series(dict)).T
print(df_oh_my)