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?
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?
Réponses:
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.
inplace=True
option de paramètre). Sinon, parfait.
Si vous essayez de modifier df
sur place, l'option la moins chère (et la plus simple) est l'ajout sur place directement sur df.columns
(c'est-à-dire en utilisant Index.__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]
Il est également possible d'ajouter des correctifs lors du chaînage des méthodes. Pour ajouter un suffixe, utilisezDataFrame.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
.
add_*fix
Ce sont de bonnes méthodes si vous essayez d'effectuer un chaînage de méthodes:
df.some_method1().some_method2().add_*fix(...)
Cependant, add_prefix
(et add_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 appeler pipe
:
def add_suffix(df):
df.columns += '_some_suffix'
return df
df.some_method1().some_method2().pipe(add_suffix)
new
ou old
) 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.
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')
DataFrame.rename
.Dépréciation de add_prefix
etadd_suffix
Dans les futures versions de pandas add_prefix
et add_suffix
sera obsolète . La nouvelle méthode conseillée consiste à utiliser DataFrame.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
de axis=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)