Skip to content
Advertisement

DataFrame from list of string dicts

So I have a list where each entry looks something like this:

"{'A': 1, 'B': 2, 'C': 3}"

I am trying to get a dataframe that looks like this

    A   B   C
0   1   2   3
1   4   5   6 
2   7   8   9

But I’m having trouble converting the format into something that can be read into a DataFrame. I know that pandas should automatically convert dicts into dataframes, but since my list elements are surrounded by quotes, it’s getting confused and giving me

               0
0  {'A': 1, 'B': 2, 'C': 3}
...

I’ve tried using using json, concat’ing a list of dataframes, and so on, but to no avail.

Advertisement

Answer

eval is not safe. Check this comparison.

Instead use ast.literal_eval:

Assuming this to be your list:

In [572]: l = ["{'A': 1, 'B': 2, 'C': 3}", "{'A': 4, 'B': 5, 'C': 6}"]

In [584]: import ast
In [587]: df = pd.DataFrame([ast.literal_eval(i) for i in l])

In [588]: df
Out[588]: 
   A  B  C
0  1  2  3
1  4  5  6
User contributions licensed under: CC BY-SA
6 People found this is helpful
Advertisement