DataFrame constructor not properly called! error

Question:

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.execute(query);
result_set = result.fetchall();
data = "[";
for row in result_set:
`row["tag_expression"]`)
    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.

Asked By: Ravi khatri

||

Answers:

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)
Answered By: joris

Just ran into the same error, but the above answer could not help me.

My code worked fine on my computer which was like this:

test_dict = {'x': '123', 'y': '456', 'z': '456'}
df=pd.DataFrame(test_dict.items(),columns=['col1','col2'])

However, it did not work on another platform. It gave me the same error as mentioned in the original question. I tried below code by simply adding the list() around the dictionary items, and it worked smoothly after:

df=pd.DataFrame(list(test_dict.items()),columns=['col1','col2'])

Hopefully, this answer can help whoever ran into a similar situation like me.

Answered By: dayaoyao
import json

# Opening JSON file
f = open('data.json')

# returns JSON object as
# a dictionary
data1 = json.load(f)

#converting it into dataframe
df = pd.read_json(data1, orient ='index')
Answered By: Amit vijay singh
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.