ajout de plusieurs colonnes pour les pandas simultanément
Je suis nouveau sur les pandas et à essayer de comprendre comment ajouter plusieurs colonnes pour les pandas simultanément. Toute l'aide ici est apprécié. Idéalement, je voudrais le faire en une seule étape, plutôt que de multiples répéter les étapes...
import pandas as pd
df = {'col_1': [0, 1, 2, 3],
'col_2': [4, 5, 6, 7]}
df = pd.DataFrame(df)
df[[ 'column_new_1', 'column_new_2','column_new_3']] = [np.nan, 'dogs',3] #thought this would work here...
Vous devez vous connecter pour publier un commentaire.
Je me serais attendu à votre syntaxe de travailler trop. Le problème se pose car, lorsque vous créez de nouvelles colonnes avec la colonne-syntaxe de la liste (
df[[new1, new2]] = ...
), les pandas exige que le côté droit soit un DataFrame (à noter qu'il n'a pas vraiment d'importance si les colonnes du DataFrame ont les mêmes noms que les colonnes que vous créez).Votre syntaxe fonctionne très bien pour l'attribution de valeurs scalaires à existant colonnes, et les pandas est également heureux d'attribuer des valeurs scalaires pour une nouvelle colonne à l'aide de la seule colonne de la syntaxe (
df[new1] = ...
). Donc la solution est soit de le convertir en une seule colonne de cession, ou créer vous-même un DataFrame pour le côté droit.Voici plusieurs approches que sera travail:
Ensuite l'une des opérations suivantes:
(1) Techniquement, c'est trois étapes, mais il semble comme une étape:
(2)
DataFrame
idéalement étend une seule ligne correspond à l'index, de sorte que vous pouvez le faire:(3) Ce serait bien travailler si vous faites une temporaire de la trame de données avec de nouvelles colonnes, puis de les combiner avec les données d'origine image plus tard:
(4) Similaire à la précédente, mais en utilisant
join
au lieu deconcat
(peut être moins efficace):(5) C'est une façon "naturelle" pour créer le nouveau bloc de données que les deux précédents, mais les nouvelles colonnes sont triés par ordre alphabétique (au moins avant de Python 3.6 ou 3.7):
(6) j'aime bien cette variante sur @zéro de répondre à beaucoup de choses, mais comme le précédent, le nouveau colonnes seront toujours classés par ordre alphabétique, au moins avec les premières versions de Python:
(7) Ce qui est intéressant (basé sur https://stackoverflow.com/a/44951376/3830997), mais je ne sais pas quand il sera en vaut la peine:
(8) À la fin c'est difficile de battre cette:
Note: plusieurs de ces options ont déjà été abordés dans d'autres réponses: Ajouter plusieurs colonnes à DataFrame et leur égale à une colonne existante, Est-il possible d'ajouter plusieurs colonnes à la fois à une pandas DataFrame?, Pandas: Ajouter plusieurs colonnes vides à DataFrame
Vous pouvez utiliser
assign
avec un dictionnaire des noms de colonnes et les valeurs.Avec l'utilisation de concat:
Pas très sûr de ce que tu voulais faire avec
[np.nan, 'dogs',3]
. Peut-être que maintenant définir les valeurs par défaut?utilisation de la liste de compréhension,
pd.DataFrame
etpd.concat
Veux juste souligner que option2 dans @Matthias Fripp la réponse de
est déjà documentée dans des pandas propre documentation
http://pandas.pydata.org/pandas-docs/stable/indexing.html#basics
pd.DataFrame([[np.nan, 'dogs', 3]], index=df.index)
réplique l'un de ligne, il est donné à créer tout un dataframe de la même longueur que celle de l'indice.si l'ajout d'un grand nombre de colonnes manquantes (a, b, c ,....) avec la même valeur, ici 0, j'ai fait ça:
Il est basé sur la deuxième variante de la accepté de répondre.