DataFrame-constructor niet correct aangeroepen! fout

Ik ben nieuw bij Python en ik heb problemen met het maken van het DataFramein het formaat van sleutel en waarde, d.w.z.

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

Hier is mijn 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); 

Maar als ik de gegevens in DataFramedoorgeef, zie ik dat

pandas.core.common.PandasError: DataFrame-constructor niet correct aangeroepen!

terwijl als ik de gegevens afdruk en dezelfde waarde toewijs aan de gegevensvariabele, dan werkt het.


Antwoord 1, autoriteit 100%

U geeft een string-representatie van een dict aan de DataFrame-constructor, en niet een dict zelf. Dit is dus de reden waarom je die foutmelding krijgt.

Dus als je je code wilt gebruiken, kun je het volgende doen:

df = DataFrame(eval(data))

Maar het zou beter zijn om de string niet in de eerste plaats te maken, maar direct in een dictaat te zetten. Ongeveer zoiets als:

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

Maar waarschijnlijk is dit niet nodig, zoals afhankelijk van wat precies in uw result_setis, kunt u waarschijnlijk:

  • Geef dit rechtstreeks aan een dataframe: DataFrame(result_set)
  • of gebruik de Panda’s read_sql_queryFunctie om dit voor u te doen (zie Documenten hierover)

Antwoord 2, Autoriteit 4%

kwam gewoon in dezelfde fout in, maar het bovenstaande antwoord kan me niet helpen.

Mijn code werkte prima op mijn computer die zo was:

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

Het werkte echter niet op een ander platform. Het gaf me dezelfde fout zoals vermeld in de oorspronkelijke vraag. Ik heb het onderstaande code geprobeerd door eenvoudig de list()rond de woordenboekitems toe te voegen en het werkte soepel na:

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

Hopelijk kan dit antwoord helpen om een ​​soortgelijke situatie zoals ik tegen te gaan.

Other episodes