web-dev-qa-db-fra.com

pandas - ajoute une nouvelle colonne à la structure de données à partir du dictionnaire

Je voudrais ajouter une colonne 'D' à un dataframe comme ceci:

U,L
111,en
112,en
112,es
113,es
113,ja
113,zh
114,es

basé sur le dictionnaire suivant:

d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'}

de sorte que la trame de données résultante apparaisse comme:

U,L,D
111,en,en
112,en,en
112,es,en
113,es,es
113,ja,es
113,zh,es
114,es,es

Jusqu'ici, j'ai essayé la méthode pd.join() mais je ne peux pas comprendre comment cela fonctionne avec les dictionnaires.

49
Fabio Lamanna

Appelez map et transmettez le dict, cela effectuera une recherche et retournera la valeur associée pour cette clé:

In [248]:

d = {112: 'en', 113: 'es', 114: 'es', 111: 'en'}
df['D'] = df['U'].map(d)
df
Out[248]:
     U   L   D
0  111  en  en
1  112  en  en
2  112  es  en
3  113  es  es
4  113  ja  es
5  113  zh  es
6  114  es  es
98
EdChum

Voici un moyen plus simple qui devrait bien fonctionner aussi:

df["D"] = pd.Series(d)

Remarque: les clés dict doivent être dans l’index DataFrame pour cela.

17
Sawant

J'ai eu TypeError: 'dict' object is not callable error pour la solution EdChum lorsque j'essaie d'utiliser index.map () ... Et je n'ai pas trouvé de moyen d'obtenir l'index en tant que série.

J'ai donc trouvé une autre solution à ce problème en créant d'abord un objet Series à partir de l'objet dict.

new_d = pd.Series(d)

Et puis faites le pd.join avec la colonne que vous aimez. Cela peut aider.

7
Yuan Tao