J'ai un fichier csv sans en-tête, avec un index DateTime. Je veux renommer l'index et le nom de la colonne, mais avec df.rename (), seul le nom de la colonne est renommé. Punaise? Je suis sur la version 0.12.0
In [2]: df = pd.read_csv(r'D:\Data\DataTimeSeries_csv//seriesSM.csv', header=None, parse_dates=[[0]], index_col=[0] )
In [3]: df.head()
Out[3]:
1
0
2002-06-18 0.112000
2002-06-22 0.190333
2002-06-26 0.134000
2002-06-30 0.093000
2002-07-04 0.098667
In [4]: df.rename(index={0:'Date'}, columns={1:'SM'}, inplace=True)
In [5]: df.head()
Out[5]:
SM
0
2002-06-18 0.112000
2002-06-22 0.190333
2002-06-26 0.134000
2002-06-30 0.093000
2002-07-04 0.098667
rename_axis
méthode.df.rename_axis("Date", axis='index', inplace=True)
selon la documentation pandas.pydata.org/pandas-docs/stable/generated/… oudf.index.names = ['Date']
Réponses:
La
rename
méthode prend un dictionnaire pour l'index qui s'applique aux valeurs d' index .Vous souhaitez renommer le nom du niveau d'index:
Une bonne façon de penser à cela est que les colonnes et l'index sont le même type d'objet (
Index
ouMultiIndex
), et que vous pouvez échanger les deux via transpose.C'est un peu déroutant car les noms d'index ont une signification similaire à celle des colonnes, voici donc quelques exemples supplémentaires:
Vous pouvez voir le changement de nom sur l'index, ce qui peut changer la valeur 1:
En renommant les noms de niveau:
Remarque: cet attribut est juste une liste et vous pouvez le renommer en tant que compréhension / carte de liste.
la source
"inplace =True"
,df1.rename
ne changerait vraiment rien.La réponse actuellement sélectionnée ne mentionne pas la
rename_axis
méthode qui peut être utilisée pour renommer les niveaux d'index et de colonne.Pandas a une certaine bizarrerie lorsqu'il s'agit de renommer les niveaux de l'index. Il existe également une nouvelle méthode DataFrame
rename_axis
disponible pour modifier les noms de niveau d'index.Jetons un œil à un DataFrame
Ce DataFrame a un niveau pour chacun des index de ligne et de colonne. L'index de ligne et de colonne n'a pas de nom. Modifions le nom du niveau d'index de ligne en «noms».
La
rename_axis
méthode a également la possibilité de modifier les noms de niveau de colonne en modifiant leaxis
paramètre:Si vous définissez l'index avec certaines des colonnes, le nom de la colonne deviendra le nouveau nom de niveau d'index. Ajoutons aux niveaux d'indexation de notre DataFrame d'origine:
Remarquez que l'index d'origine n'a pas de nom. Nous pouvons toujours utiliser
rename_axis
mais devons lui transmettre une liste de la même longueur que le nombre de niveaux d'index.Vous pouvez utiliser
None
pour supprimer efficacement les noms de niveau d'index.Les séries fonctionnent de la même manière mais avec quelques différences
Créons une série avec trois niveaux d'index
Nous pouvons utiliser de la
rename_axis
même manière que nous l'avons fait avec DataFramesNotez qu'il y a un élément supplémentaire de métadonnées sous la série appelée
Name
. Lors de la création d'une série à partir d'un DataFrame, cet attribut est défini sur le nom de la colonne.Nous pouvons passer un nom de chaîne à la
rename
méthode pour le changerLes DataFrames n'ont pas cet attribut et en fait lèveront une exception s'ils sont utilisés comme ceci
Avant pandas 0.21, vous auriez pu
rename_axis
renommer les valeurs de l'index et des colonnes. Il est obsolète, alors ne le faites pasla source
df1 = df.set_index(['state', 'color'], append=True)
avecdf1.rename_axis(['names', None, 'Colors'])
?Pour les
pandas
versions plus récentesou
Ce dernier est requis si une trame de données doit conserver toutes ses propriétés.
la source
Dans Pandas version 0.13 et supérieure, les noms de niveau d'index sont immuables (type
FrozenList
) et ne peuvent plus être définis directement. Vous devez d'abord utiliserIndex.rename()
pour appliquer les nouveaux noms de niveau d'index à l'index, puis utiliserDataFrame.reindex()
pour appliquer le nouvel index au DataFrame. Exemples:Pour la version Pandas <0.13
Pour la version Pandas> = 0.13
la source
index
ou l' autre oucolumn
directement change les deux pour moi (sur Pandas 0.19), mais pas avec cette méthode.Vous pouvez également utiliser
Index.set_names
comme suit:la source
multiIndex
?MultiIndex(levels=[['A', 'B', 'C', 'D', 'E', 'F'], ['Y', 'Z']], labels=[[0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5], [0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1]], names=['Portfolio', None])
Est-il possible de renommer leNone
enmeasures
?Si vous souhaitez utiliser le même mappage pour renommer les colonnes et l'index, vous pouvez faire:
la source
Est le seul qui fait le travail pour moi (pandas 0.22.0).
Sans inplace = True, le nom de l'index n'est pas défini dans mon cas.
la source
vous pouvez utiliser
index
et lescolumns
attributs depandas.DataFrame
. REMARQUE: le nombre d'éléments de la liste doit correspondre au nombre de lignes / colonnes.la source