DataFrame constructor not properly called! error


I am new to Python and I am facing problem in creating the Dataframe in the format of key and value i.e.

data = [{'key':'[GlobalProgramSizeInThousands]','value':'1000'},]

Here is my code:

columnsss = ['key','value'];
query = "select * from bparst_tags where tag_type = 1 ";
result = database.cursor(db.cursors.DictCursor);
result_set = result.fetchall();
data = "[";
for row in result_set:
    data +=  "{'value': %s , 'key': %s }," % ( `row["tag_expression"]`, `row["tag_name"]` )
data += "]" ;    
df = DataFrame(data , columns=columnsss); 

But when I pass the data in DataFrame it shows me

pandas.core.common.PandasError: DataFrame constructor not properly called!

while if I print the data and assign the same value to data variable then it works.


You are providing a string representation of a dict to the DataFrame constructor, and not a dict itself. So this is the reason you get that error.

So if you want to use your code, you could do:

df = DataFrame(eval(data))

But better would be to not create the string in the first place, but directly putting it in a dict. Something roughly like:

data = []
for row in result_set:
    data.append({'value': row["tag_expression"], 'key': row["tag_name"]})

But probably even this is not needed, as depending on what is exactly in your result_set you could probably:

  • provide this directly to a DataFrame: DataFrame(result_set)
  • or use the pandas read_sql_query function to do this for you (see docs on this)


Leave a Reply

Your email address will not be published. Required fields are marked *