Construire une DataFrame de pandas à partir des valeurs des variables donne "ValueError: si vous utilisez toutes les valeurs scalaires, vous devez passer un index"

C'est peut-être une question simple, mais je ne sais pas comment faire. Disons que j'ai deux variables comme suit.

a = 2
b = 3

je veux construire une base de données à partir de ceci:

df2 = pd.DataFrame({'A':a,'B':b})

cela génère une erreur:

ValueError: si vous utilisez toutes les valeurs scalaires, vous devez passer un indice

j'ai essayé aussi:

df2 = (pd.DataFrame({'a':a,'b':b})).reset_index()

Cela donne le même message d'erreur.

153
demandé sur smci 2013-07-24 20:40:24

12 réponses

le message d'erreur indique que si vous passez des valeurs scalaires, vous devez passer un index. Vous pouvez donc soit ne pas utiliser de valeurs scalaires pour les colonnes, par exemple utiliser une liste:

>>> df = pd.DataFrame({'A': [a], 'B': [b]})
>>> df
   A  B
0  2  3

ou utiliser des valeurs scalaires et passer un indice:

>>> df = pd.DataFrame({'A': a, 'B': b}, index=[0])
>>> df
   A  B
0  2  3
253
répondu DSM 2013-07-24 16:49:48

vous pouvez aussi utiliser pd.DataFrame.from_records ce qui est plus pratique quand vous avez déjà le dictionnaire en main:

df = pd.DataFrame.from_records([{ 'A':a,'B':b }])

vous pouvez également définir index, si vous voulez, par:

df = pd.DataFrame.from_records([{ 'A':a,'B':b }], index='A')
24
répondu fAX 2016-03-13 13:26:17

vous devez d'abord créer une série pandas. La deuxième étape consiste à convertir la série pandas en DataFrame pandas.

import pandas as pd
data = {'a': 1, 'b': 2}
pd.Series(data).to_frame()
15
répondu MLguy 2017-09-12 10:58:47

vous devez fournir des itérables comme les valeurs pour les colonnes de DataFrame de Pandas:

df2 = pd.DataFrame({'A':[a],'B':[b]})
6
répondu ely 2013-07-24 16:49:49

peut-être que la série fournirait toutes les fonctions dont vous avez besoin:

pd.Series({'A':a,'B':b})

DataFrame peut être considéré comme une collection de séries donc vous pouvez:

  • regrouper plusieurs séries en une seule base de données (comme décrit ici )

  • ajouter une variable de série dans la base de données existante ( exemple ici )

6
répondu Rob 2017-05-23 11:47:28

c'est parce qu'une base de données a deux dimensions intuitives - les colonnes et les lignes.

vous ne spécifiez les colonnes qu'en utilisant les touches du dictionnaire.

si vous voulez seulement spécifier des données unidimensionnelles, utilisez une série!

3
répondu danuker 2017-07-22 13:53:46

Si vous avez l'intention de convertir un dictionnaire de scalaires, vous devez inclure un indice:

import pandas as pd

alphabets = {'A': 'a', 'B': 'b'}
index = [0]
alphabets_df = pd.DataFrame(alphabets, index=index)
print(alphabets_df)

bien que l'index ne soit pas requis pour un dictionnaire de listes, la même idée peut être étendue à un dictionnaire de listes:

planets = {'planet': ['earth', 'mars', 'jupiter'], 'length_of_day': ['1', '1.03', '0.414']}
index = [0, 1, 2]
planets_df = pd.DataFrame(planets, index=index)
print(planets_df)

bien sûr, pour le dictionnaire des listes, vous pouvez construire la base de données sans index:

planets_df = pd.DataFrame(planets)
print(planets_df)
3
répondu k0L1081 2017-11-30 19:34:20

j'ai eu le même problème avec les tableaux vides et la solution est de les aplatir:

data = {
    'b': array1.flatten(),
    'a': array2.flatten(),
}

df = pd.DataFrame(data)
3
répondu MicheleDIncecco 2018-07-04 11:16:42

Ceci est un commentaire à la réponse de @fAx: entrée ne doit pas être une liste d'enregistrements, il peut être un seul dictionnaire ainsi:

pd.DataFrame.from_records({'a':1,'b':2}, index=[0])
   a  b
0  1  2

Qui semble être l'équivalent de:

pd.DataFrame({'a':1,'b':2}, index=[0])
   a  b
0  1  2
1
répondu S.V 2018-04-24 15:12:31

Vous pouvez essayer:

df2 = pd.DataFrame.from_dict({'a':a,'b':b}, orient = 'index')

de la documentation sur l'argument "orient": si les touches du dict passé doivent être les colonnes du datagramme résultant, passez ‘columns’ (par défaut). Sinon, si les clés doivent être des lignes, passez ‘index’.

0
répondu Matthew Connell 2018-03-30 02:02:03

si vous avez un dictionnaire, vous pouvez le transformer en une base de données pandas avec la ligne de code suivante:

pd.DataFrame({"key": d.keys(), "value": d.values()})
-1
répondu ingrid 2016-04-08 14:53:03

passez simplement le dict sur une liste:

a = 2
b = 3
df2 = pd.DataFrame([{'A':a,'B':b}])
-1
répondu LeandroHumb 2018-09-26 12:36:24