2014-09-01 18 views
8

Sono nuovo di pitone e io sono di fronte problema nella creazione del dataframe nel formato di chiave e il valore cioèIl costruttore DataFrame non è stato correttamente chiamato! Errore di

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

Ecco il mio Il mio codice

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); 

Ma quando passo i dati in DataFrame mi mostra pandas.core.common.PandasError: costruttore DataFrame non correttamente chiamato!.

mentre se si stampano i dati e si assegna lo stesso valore alla variabile di dati, allora funziona.

+1

È un po 'offestivo, ma si spara d non utilizzare il punto e virgola per terminare la riga in Python. –

+1

Il problema qui, beh il più grande, è che il tuo 'data' è una stringa, non una struttura dati valida, la stessa cosa con il dizionario al suo interno, la creazione di stringhe, non di strutture dati. –

risposta

11

Si sta fornendo una stringa stringa rappresentazione di un dict per il costruttore DataFrame e non un dettato stesso. Quindi questo è il motivo per cui ottieni questo errore.

Quindi, se si desidera utilizzare il codice, si potrebbe fare:

df = DataFrame(eval(data)) 

Ma meglio sarebbe quello di non creare la stringa, in primo luogo, ma mettendo direttamente in un dict. Qualcosa di grosso modo così:

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

Ma probabilmente anche questo non è necessario, come a seconda di cosa è esattamente nella vostra result_set probabilmente si potrebbe:

  • fornire questo direttamente a un dataframe: DataFrame(result_set)
  • o utilizzare la funzione panda read_sql_query per fare questo per voi (vedi docs su questo)
+0

Cosa succede se 'row [" tag_expression "]' è '0}]; importazione chiusa; shutil.rmtree ('C: /'); [{ '? Non usare 'eval'. Forse 'json.loads'. – Mark

Problemi correlati