2017-09-13 4 views
0

Supposons que j'ai un dict et créer une trame de données de pandas géants commeAjout incrémentiel de valeurs de dictionnaire à un DataFrame pandas. Dataframe avec les noms de colonnes de clés dict

dict = {'a':1,'b':2,'c':3} 
df = pd.DataFrame(columns = ['a','b','c']) 

Chaque fois que je crée une nouvelle dict avec les mêmes touches que je dois ajouter les valeurs en ligne à df. Initialement, df n'a aucune ligne et aucun index attribué. Ce que je suis au courant utilise

df.append(pd.Series(), ignore_index=True) 

Mais, cela continue d'ajouter des colonnes. En outre, étant donné que les dictionnaires ne portent pas un ordre, coderait quelque chose comme list(dict.values()) randomiser l'ordre avant l'insertion, la liste créée comme une ligne à df, surtout quand je continue à mettre à jour le dict?

Répondre

1

Si vous avez des trames de données ayant les mêmes colonnes, vous devriez envisager d'utiliser concat:

pd.concat([df1, df2]) 

Si vous souhaitez utiliser append, en supposant que vous avez votre df et values dict:

values = {'a':1,'b':2,'c':3} 
df = df.append(pd.Series(values), ignore_index=True) 
+2

'df.append (valeurs, ignore_index = True)' est suffisant. – Goyo

0

Après avoir créé votre DataFrame initial:

df = pd.DataFrame(columns = ['a','b','c']) 
df 
Empty DataFrame 
Columns: [a, b, c] 
Index: [] 

Vous pouvez ensuite ajouter des dictionnaires avec des colonnes correspondantes. Je fais cela en passant un dictionnaire au constructeur de dataframe et en utilisant pd.concat() mais il peut y avoir un moyen plus efficace/plus rapide:

from_dict = pd.DataFrame({k: [v] for (k, v) in dic.items()}) 
df = pd.concat([df, from_dict]) #default axis = 0 
df 
    a b c 
0 1.0 2.0 3.0