Je veux ajouter un _x
suffixe à chaque nom de colonne comme ceci:
featuresA = myPandasDataFrame.columns.values + '_x'
Comment puis-je faire cela? De plus, si je voulais ajouter x_
comme suffixe, comment la solution changerait-elle?
Vous pouvez utiliser une list
compréhension:
df.columns = [str(col) + '_x' for col in df.columns]
Il existe également des méthodes intégrées comme .add_suffix()
et .add_prefix()
comme mentionné dans une autre réponse.
Ce qui suit est la meilleure façon d'ajouter un suffixe à mon avis.
df = df.add_suffix('_some_suffix')
Comme il s'agit d'une fonction appelée sur DataFrame et qui renvoie DataFrame - vous pouvez l'utiliser dans la chaîne des appels.
la source
inplace=True
option de paramètre). Sinon, parfait.Concaténation sur place élégante
Si vous essayez de modifier
df
sur place, l'option la moins chère (et la plus simple) est l'ajout sur place directement surdf.columns
(c'est-à-dire en utilisantIndex.__iadd__
).df = pd.DataFrame({"A": [9, 4, 2, 1], "B": [12, 7, 5, 4]}) df A B 0 9 12 1 4 7 2 2 5 3 1 4
df.columns += '_some_suffix' df A_some_suffix B_some_suffix 0 9 12 1 4 7 2 2 5 3 1 4
Pour ajouter un préfixe, vous utiliseriez de la même manière
df.columns = 'some_prefix_' + df.columns df some_prefix_A some_prefix_B 0 9 12 1 4 7 2 2 5 3 1 4
Une autre option bon marché consiste à utiliser une compréhension de liste avec
f-string
mise en forme (disponible sur python3.6 +).df.columns = [f'{c}_some_suffix' for c in df] df A_some_suffix B_some_suffix 0 9 12 1 4 7 2 2 5 3 1 4
Et pour le préfixe, de même,
df.columns = [f'some_prefix{c}' for c in df]
Chaînage de méthodes
Il est également possible d'ajouter des correctifs lors du chaînage des méthodes. Pour ajouter un suffixe, utilisez
DataFrame.add_suffix
df.add_suffix('_some_suffix') A_some_suffix B_some_suffix 0 9 12 1 4 7 2 2 5 3 1 4
Cela renvoie une copie des données. IOW,
df
n'est pas modifié.L'ajout de préfixes se fait également avec
DataFrame.add_prefix
.df.add_prefix('some_prefix_') some_prefix_A some_prefix_B 0 9 12 1 4 7 2 2 5 3 1 4
Qui ne modifie pas non plus
df
.Critique de
add_*fix
Ce sont de bonnes méthodes si vous essayez d'effectuer un chaînage de méthodes:
Cependant,
add_prefix
(etadd_suffix
) crée une copie de l' ensemble du dataframe, juste pour modifier les en-têtes. Si vous pensez que c'est du gaspillage, mais que vous souhaitez quand même enchaîner, vous pouvez appelerpipe
:def add_suffix(df): df.columns += '_some_suffix' return df df.some_method1().some_method2().pipe(add_suffix)
la source
new
ouold
) au lieu de toutes les colonnes? Merci.df = pd.DataFrame([[1,2,3]]*10)
->df.columns
, alors vous utiliseriezdf.add_suffix('_x')
df.columns = df.columns.astype(str) + '_x'
comme le montre ma première méthode.Je n'ai pas vu cette solution proposée ci-dessus, alors ajoutez-la à la liste:
df.columns += '_x'
Et vous pouvez facilement vous adapter au scénario de préfixe.
la source
df = pd.DataFrame([[1,2,3]]*10)
->df.columns
, alors vous utiliseriezdf.add_suffix('_x')
Je connais 4 façons d'ajouter un suffixe (ou un préfixe) aux noms de votre colonne:
1-
df.columns = [str(col) + '_some_suffix' for col in df.columns]
ou
2-
df.rename(columns= lambda col: col+'_some_suffix')
ou
3-
df.columns += '_some_suffix'
beaucoup plus facile.ou, le plus beau:
3-
df.add_suffix('_some_suffix')
la source
Utilisation
DataFrame.rename
.Dépréciation de
add_prefix
etadd_suffix
Dans les futures versions de pandas
add_prefix
etadd_suffix
sera obsolète . La nouvelle méthode conseillée consiste à utiliserDataFrame.rename
:df = pd.DataFrame({'A': range(3), 'B': range(4, 7)}) print(df) A B 0 0 4 1 1 5 2 2 6
Utilisation
rename
deaxis=1
la mise en forme avec et chaîne:df.rename('col_{}'.format, axis=1) # or df.rename(columns='col_{}'.format) col_A col_B 0 0 4 1 1 5 2 2 6
Pour écraser réellement vos noms de colonnes, nous pouvons affecter les valeurs renvoyées à notre
df
:df = df.rename('col_{}'.format, axis=1)
ou utilisez
inplace=True
:df.rename('col_{}'.format, axis=1, inplace=True)
la source