Affectation sur place très simple: df['new'] = 0
Pour une modification sur place, effectuez une affectation directe. Cette affectation est diffusée par des pandas pour chaque ligne.
df = pd.DataFrame('x', index=range(4), columns=list('ABC'))
df
A B C
0 x x x
1 x x x
2 x x x
3 x x x
df['new'] = 'y'
# Same as,
# df.loc[:, 'new'] = 'y'
df
A B C new
0 x x x y
1 x x x y
2 x x x y
3 x x x y
Remarque pour les colonnes d'objets
Si vous souhaitez ajouter une colonne de listes vides, voici mon conseil:
- Envisagez de ne pas faire cela.
object
les colonnes sont de mauvaises nouvelles en termes de performances. Repensez la structure de vos données.
- Envisagez de stocker vos données dans une structure de données clairsemée. Pour plus d'informations: structures de données clairsemées
Si vous devez stocker une colonne de listes, veillez à ne pas copier plusieurs fois la même référence.
# Wrong
df['new'] = [[]] * len(df)
# Right
df['new'] = [[] for _ in range(len(df))]
Générer une copie: df.assign(new=0)
Si vous avez besoin d'une copie à la place, utilisez DataFrame.assign
:
df.assign(new='y')
A B C new
0 x x x y
1 x x x y
2 x x x y
3 x x x y
Et, si vous devez attribuer plusieurs de ces colonnes avec la même valeur, c'est aussi simple que,
c = ['new1', 'new2', ...]
df.assign(**dict.fromkeys(c, 'y'))
A B C new1 new2
0 x x x y y
1 x x x y y
2 x x x y y
3 x x x y y
Affectation de plusieurs colonnes
Enfin, si vous devez affecter plusieurs colonnes avec des valeurs différentes, vous pouvez utiliser assign
avec un dictionnaire.
c = {'new1': 'w', 'new2': 'y', 'new3': 'z'}
df.assign(**c)
A B C new1 new2 new3
0 x x x w y z
1 x x x w y z
2 x x x w y z
3 x x x w y z
df['new'] = pd.Series([0 for x in range(len(df.index))], index=df.index)
.